Powershell 2.0 как получить значения из удаленного реестра \..\WindowsUpdate\Auto Update\RebootRequired

Я пытаюсь запросить путь к реестру удаленного сервера:

"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"

Он содержит список всех обновлений, ожидающих перезагрузки (REG_DWORD), и, возможно, какие-то даты. Меня интересует только количество ожидающих обновлений.

Выполняя следующий командлет PS, я не получаю ожидаемого результата при запросе пути регистрации:

       $Computer = "Server01" 
       $HKLM = [UInt32] "0x80000002" 
       $WMI_Reg = [WMIClass] “\\$Computer\root\default:StdRegProv” 
       $RegRR = $WMI_Reg.EnumKey($HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired")

$RegRR = 
__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     : 
__DYNASTY        : __PARAMETERS
__RELPATH        : 
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
ReturnValue      : 0
sNames           : 

Однако в качестве теста, если я запрашиваю путь за один ключ до этого, исключая «\ RebootRequired», тогда это работает, и я могу затем запросить sValues.

$RegRR = $WMI_Reg.EnumKey($HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     : 
__DYNASTY        : __PARAMETERS
__RELPATH        : 
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
ReturnValue      : 0
sNames           : {Power, RequestedAppCategories, Results, RebootRequired...}

В конечном счете, я хочу запросить этот регистрационный ключ, чтобы вернуть количество обновлений, ожидающих перезагрузки, существующих записей DWORD. Есть дата RebootRequiredSince, которая поначалу могла бы пригодиться, но обнаружил, что не на всех наших серверах она есть (смесь 2008 R2 и 2012).

Есть идеи?

Спасибо


person TOGEEK    schedule 23.06.2016    source источник
comment
Привет, вы можете попробовать этот другой метод: stackoverflow.com/questions/ 15069130/get-remote-registry-value   -  person sodawillow    schedule 23.06.2016


Ответы (1)


Убедитесь, что вы включили службу RemoteRegistry на целевой машине, затем вы можете попробовать:

$Computer = "RemoteComputerName"
$RootKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$Computer)
$SubKey = $RootKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired")

Чтобы получить все доступные значения, вы можете сделать:

$SubKey.GetValueNames()

Чтобы получить все имена подразделов:

$SubKey.GetSubKeyNames()

Чтобы получить конкретное значение:

$SubKey.GetValue("ValueName")

Чтобы получить значение ключа по умолчанию:

$SubKey.GetValue($null)
person Avshalom    schedule 23.06.2016
comment
Да, я сделал это, за исключением того, что я использовал GetSubKeyNames(), который вернул null, а не GetValueNames(), и теперь я получаю нужные мне результаты, спасибо! - person TOGEEK; 23.06.2016