@Nordman99

Как найти ключ с нужным значением в реестре с помощью powershell?

Всем доброго дня! Подскажите плиз по такой проблеме:
Нужно найти в определенном разделе реестра винды ключ с нужным значением (нужен именно павершелл т.к. нужно будет использовать данный скрипт для поиска в разных ситуациях разных значений)
Нагуглить часть ответа несложно:
Допустим мне нужно найти некое USB устройство, в ветке HKLM\SYSTEM\ControlSet001\Enum\USB\
Get-ChildItem -path HKLM:\SYSTEM\ControlSet001\Enum\USB\ -recurse -ErrorAction SilentlyContinue

Дальше получаю длинный вывод чтото вида:
Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_13FE&PID_4200\070189C3CBEAEA48


Name                           Property
----                           --------
Device Parameters              EnumerationRetryCount : 0
                               SymbolicName          : \??\USB#VID_13FE&PID_4200#070189C3CBEAEA48#{a5dcbf10-6530-11d2-901f-00c04fb951ed}


    Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_13FE&PID_4200\070189C3CBEAEA48\Device Parameters


Name                           Property
----                           --------
Ceip                           DeviceInformation         : 0
                               PortInterconnectType      : 0
                               TroubleshooterRootCauseId : 0
e5b3b5ac-9725-4f78-963f-03dfb1 D3ColdSupported : 1
d828c7


    Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB


Name                           Property
----                           --------
VID_8564&PID_1000


    Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_8564&PID_1000


Name                           Property
----                           --------
04FAQEBHBA2Q82FM               DeviceDesc          : @usbstor.inf,%genericbulkonly.devicedesc%;USB Mass Storage Device
                               LocationInformation : Port_#0009.Hub_#0001
                               Capabilities        : 148
                               Address             : 9
                               ContainerID         : {4c4eb887-fa5d-5a0f-bc1c-b896a1a303cf}
                               HardwareID          : {USB\VID_8564&PID_1000&REV_1100, USB\VID_8564&PID_1000}
                               CompatibleIDs       : {USB\Class_08&SubClass_06&Prot_50, USB\Class_08&SubClass_06, USB\Class_08}
                               ClassGUID           : {36fc9e60-c465-11cf-8056-444553540000}
                               Service             : USBSTOR
                               Driver              : {36fc9e60-c465-11cf-8056-444553540000}\0007
                               Mfg                 : @usbstor.inf,%generic.mfg%;Compatible USB storage device
                               ConfigFlags         : 0


    Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_8564&PID_1000\04FAQEBHBA2Q82FM


Name                           Property
----                           --------
Device Parameters              EnumerationRetryCount : 0
                               SymbolicName          : \??\USB#VID_8564&PID_1000#04FAQEBHBA2Q82FM#{a5dcbf10-6530-11d2-901f-00c04fb951ed}


    Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_8564&PID_1000\04FAQEBHBA2Q82FM\Device Parameters


Name                           Property
----                           --------
Ceip                           DeviceInformation         : 0
                               PortInterconnectType      : 0
                               TroubleshooterRootCauseId : 0
e5b3b5ac-9725-4f78-963f-03dfb1 D3ColdSupported : 1
d828c7

Только вывод намного больше, и как мне из него получить нужное?
Как мне из вывода получить любое нужное мне значение? Например Hive? Property?
(Get-ChildItem -path HKLM:\SYSTEM\ControlSet001\Enum\USB\ -recurse -ErrorAction SilentlyContinue).gettype() - говорит что это массив:
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

Только вот скольки мерный?
Т.е. к его элементам можно обратится как к элементам массива, делаю:
(Get-ChildItem -path HKLM:\SYSTEM\ControlSet001\Enum\USB\ -recurse -ErrorAction SilentlyContinue)[1]

Получаю:
Hive: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\ROOT_HUB30


Name                           Property
----                           --------
4&9f1d25&0&0                   Capabilities   : 128
                               Address        : 0
                               ContainerID    : {00000000-0000-0000-ffff-ffffffffffff}
                               HardwareID     : {USB\ROOT_HUB30&VID8086&PIDA36D&REV0010, USB\ROOT_HUB30&VID8086&PIDA36D, USB\ROOT_HUB30}
                               CompatibleIDs  : {}
                               ClassGUID      : {36fc9e60-c465-11cf-8056-444553540000}
                               Service        : USBHUB3
                               DeviceDesc     : @usbhub3.inf,%usbhub3.roothubdevicedesc%;USB Root Hub (USB 3.0)
                               Driver         : {36fc9e60-c465-11cf-8056-444553540000}\0001
                               Mfg            : @usbhub3.inf,%generic.mfg%;(Standard USB HUBs)
                               ConfigFlags    : 0
                               ParentIdPrefix : 5&34c36748&0

Дальше пробую:
(Get-ChildItem -path HKLM:\SYSTEM\ControlSet001\Enum\USB\ -recurse -ErrorAction SilentlyContinue)[1].Property

Получаю:
Capabilities
Address
ContainerID
HardwareID
CompatibleIDs
ClassGUID
Service
DeviceDesc
Driver
Mfg
ConfigFlags
ParentIdPrefix

Но без значений, а мне допустим надо узнать значение каждого Property (Как в выводе выше)
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov
Where-Object + GetValue()

$usb = Get-ChildItem -path HKLM:\SYSTEM\ControlSet001\Enum\USB\ -Recurse
$usb | Where-Object { $_.GetValue('Address') -eq 4 }


Вообще, если вы используете свежий powershell с модулем PSReadLine, то автодополнение очень помогает

$usb[1].<Ctrl+Space>
И разглядываете
или old-way
Get-Member -InputObject $usb[1]

Можно ещё заморочиться с Get-ItemProperty, но это будет сложнее
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы