Если вы пытаетесь получить значение из раздела реестра на удаленном компьютере «Сервер», то ваша основная проблема заключается в следующем фрагменте кода:
$ wmi = [wmiclass] "Root \ default: stdRegProv "
Чтобы просмотреть ключ на удаленном компьютере, необходимо подключиться к реестру на удаленном хосте в формате UNC.
[WmiClass]"\\$Server\ROOT\DEFAULT:StdRegProv"
Длядополнительную информацию о WMI StdRegProv см. http://msdn.microsoft.com/en-us/library/aa393664(v=vs.85).aspx
Краткий справочник, различные кусты реестра в этом классе:
HKEY_CLASSES_ROOT (2147483648 (0x80000000))
HKEY_CURRENT_USER (2147483649 (0x80000001))
HKEY_LOCAL_MACHINE (2147483650 (0x80000002))
HKEY_USERS (2147483651 (0x80000003))
HKEY_CURRENT_CONFIG (2147483653 (0x80000005))
Таким образом, правильная версия вашего кода будет:
foreach ($server in $server_list){
$HKCR = [uint32]"0x80000000"
$sSubKeyName = "AppID\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}"
$sValueName = "RemoteServerName"
$wmi = [wmiclass]"\\$server\ROOT\DEFAULT:StdRegProv"
$wmi.GetStringValue($HKCR, $sSubKeyName, $sValueName)
}
К вашему сведению, имя (по умолчанию) значения раздела реестра на самом деле является пустой строкой.Regedit просто заменяет эту пустую строку на (По умолчанию) при отображении значений ключа.Поэтому, если вам нужно прочитать значение ключа по умолчанию, которое вы используете:
$wmi.GetStringValue($HKCR, $sSubKeyName, "")
Надеюсь, любой, кто сталкивается с этим, находит это полезным.o7