Ошибка получения значения реестра с помощью Powershell - PullRequest
4 голосов
/ 29 апреля 2009

Я пытаюсь прочитать значение из записи реестра с помощью Powershell. Это довольно просто, однако один конкретный ключ реестра доставляет мне неприятности.

Если я запускаю следующее, я не могу получить значение (по умолчанию) «$ setting».

C:\Program Files\PowerGUI> $setting = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf" 

C:\Program Files\PowerGUI> $setting


PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\
               CurrentVersion\IniFileMapping\Autorun.inf
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\
               CurrentVersion\IniFileMapping
PSChildName  : Autorun.inf
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
(default)    : @SYS:DoesNotExist

Обычно я бы делал $ setting.Attribute или $ setting. (По умолчанию). Однако это приводит к следующей ошибке:

C:\Program Files\PowerGUI> $setting.(default)
The term 'default' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At :line:1 char:17
+ $setting.(default <<<< )

Как получить значение атрибута "(по умолчанию)"?

Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 29 апреля 2009

РЕДАКТИРОВАТЬ Пришлось просмотреть и старый скрипт, чтобы понять это.

Хитрость в том, что вам нужно заглянуть внутрь базового объекта PSObject, чтобы получить значения. В частности посмотрите на свойства сумки

$a = get-itemproperty -path "HKLM:\Some\Path"
$default = $a.psobject.Properties | ?{ $_.Name -eq "(default)" }

Вы также можете просто использовать индексатор вместо фильтра трюка

$default = $a.psobject.Properties["(default)"].Value;
4 голосов
/ 04 мая 2013

Используйте Get-Item, чтобы получить объект, представляющий раздел реестра:

PS > $regKey = Get-Item HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf

Это дает вам экземпляр RegistryKey. RegistryKey имеет метод с именем GetValue; если аргумент GetValue является пустой строкой (''), то он вернет значение (default):

PS > $regKey.GetValue('')

Почему это лучше, чем Get-ItemProperty? Это распространяется более естественно на Get-ChildItem. Get-ChildItem выдаст вам список RegistryKey объектов. В моем конкретном случае я хотел перечислить пути установки версий Python, установленных на моем компьютере:

PS C:\> get-childitem HKLM:\SOFTWARE\Wow6432Node\Python\PythonCore\*\InstallPath `
>> | foreach-object { $_.GetValue('') }
C:\Python26\ArcGIS10.0\
C:\Python\27\
4 голосов
/ 03 мая 2009

Другая версия:

(Get-ItemProperty 'HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ IniFileMapping \ Autorun.inf'). '(По умолчанию)'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...