使用PowerShell

时间:2015-07-29 15:48:05

标签: windows powershell registry registrykey

我正在使用PowerShell从注册表项中读取信息。

Get-ItemProperty -Path "HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\" |% {$_.ProgId} 

基本上找到机器上的默认浏览器。

但是,我一直遇到这个错误。我是PowerShell的新手,所以不确定发生了什么。

Get-ItemProperty : Cannot find path 'C:\Users\muafzal\Documents\Files\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\' because it does not exist.
At line:1 char:1
+ Get-ItemProperty -Path "HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Assoc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\muafza...ttp\UserChoice\:String) [Get-ItemProperty], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

是否有其他方法可以从注册表项获取数据( ProgId )? enter image description here

3 个答案:

答案 0 :(得分:3)

您当前的命令正在引用本地文件系统中的文件。您需要使用HKEY_CURRENT_USER注册表配置单元(HKCU:)的提供程序:

Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\" |% {$_.ProgId} 

答案 1 :(得分:2)

在powershell版本5中,您可以使用以下命令在注册表中获取该路径中ProgId的值。

Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice -Name ProgId

Get-ItemProperty和Get-ItemPropertyValue之间的区别在于后者只返回值。

您使用的路径被解释为文件位置,因为文件系统的提供程序是默认的。因此,当您想使用注册表时,您必须使用HKCU:for HKEY_CURRENT_USER和HKLM:for HKEY_LOCAL_MACHINE。

如果您尚未使用v5,则可以使用:

(Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice).ProgId

答案 2 :(得分:0)

关于提供者和不同的表示法,您可以使用以下表示法之一:

Get-ItemProperty -Path Registry::"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" -Name ProgId

OR

Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" -Name ProgId

使用完整的ROOT表示法HKEY_LOCAL_MACHINE,您应指定提供程序(注册表::) 使用HKLM的简称,您可以避免使用,应该为HKLM:\

注意: 这些符号在Powershell中称为注册表的PSDrive。 默认定义2个:

Get-PSDrive -PSProvider Registry

输出:

HKCU注册表HKEY_CURRENT_USER
HKLM注册表HKEY_LOCAL_MACHINE

您可以定义其他PSdrive

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
Get-PSDrive -PSProvider Registry

HKCU注册表HKEY_CURRENT_USER
HKLM注册表HKEY_LOCAL_MACHINE
香港大学注册处HKEY_USERS