PowerShell: получение имени раздела реестра с учетом имени и значения подраздела - PullRequest
0 голосов
/ 04 марта 2020

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

HKLM:\Software\key1\home1 home_val=C:\dir1
HKLM:\Software\key2\home2 home_val=C:\dir2

Я хочу иметь возможность вернуть имя ключа, которое имеет подключ = home_val = C: \ dir1

Я ПОЧТИ там но не могу понять, как вернуть имя ключа. Я придумал следующее:

Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\key*' -Name HOME_VAL | Select-Object -Property 'C:dir1'

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Если я правильно понимаю, home_val-ы находятся прямо под ключом *? Если это дальше вниз, вы можете повторить и игнорировать ошибки. Необходимо ввести «$ _», потому что строковая версия ключа не может использоваться в качестве аргумента команды. Либо используйте simplematch с select-string, либо удваивайте обратную косую черту, потому что это регулярное выражение. Get-childitem на самом деле не возвращает значения реестра и данные. Это иллюзия дисплея.

new-item hklm:\software\key1
new-item hklm:\software\key2
new-itemproperty hklm:\software\key1 home_val -value c:\dir1
new-itemproperty hklm:\software\key2 home_val -value c:\dir2

get-childitem -recurse hklm:\software\key* | 
  where { $_ | get-itemproperty | select-string c:\dir1 -simplematch }


    Hive: HKEY_LOCAL_MACHINE\software


Name                           Property
----                           --------
key1                           home_val : C:\dir1

Или вот так:

get-childitem -r hklm:\software\key* | get-itemproperty | 
  where { $_.home_val -match 'c:\\dir1' }


home_val     : c:\dir1
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\key1\home1
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\key1
PSChildName  : home1
PSProvider   : Microsoft.PowerShell.Core\Registry
0 голосов
/ 04 марта 2020

Ваш код выдает мне эту ошибку ...

Get-ItemPropertyValue: свойство HOME_VAL не существует по пути HKEY_LOCAL_MACHINE \ SOFTWARE \ key1

... когда он встречает ключ без значения HOME_VAL.

Это работает для меня, чтобы получить полный путь к ключу ...

PS> $filterValueName = 'home_val'
PS> $filterValueData = 'C:\dir1'
PS> Get-ChildItem -Path 'HKLM:\SOFTWARE\key*' -Recurse `
        | Where-Object { ($_ | Get-ItemProperty -Name $filterValueName).$filterValueName -eq $filterValueData } `
        | Select-Object -ExpandProperty 'Name'
HKEY_LOCAL_MACHINE\SOFTWARE\key1\home1

Это будет перечислять все ключи-потомки ниже любого HKLM:\SOFTWARE\key* ключи, выбирая те, которые имеют значение с именем home_val с данными C:\dir1 и извлекая их свойство Name. Если вы хотите указать имя ключа вместо его пути, вы можете выбрать вместо него свойство PSChildName.

...