В этой статье приведу несколько примеров работы с реестром на удаленных машинах.
Для примера будем в Powershell получать с удаленного компьютера значение ключа в котором содержится ID TeamViewer
WMI
Так или иначе для доступа к удаленному реестру потребуется повышение привилегий. Следующий код необходимо запускать в сессии с правами доменного администратора
$ComputerName = "CompName" $hklm = [UInt32] "0x80000002" $registry = [WMIClass] "\\$ComputerName\root\default:StdRegProv" $valueName = "ClientID" $registry.GetStringValue($hklm, "SOFTWARE\WOW6432Node\TeamViewer", $valueName)
Для получения возможности указать альтернативные учетные данные внутри сеанса так же можно использовать WMI
$ComputerName = "CompName" $Password = ConvertTo-SecureString "P@$$w0rd" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential "Domain\User", $Password $hklm = "2147483650" $key = "SOFTWARE\WOW6432Node\TeamViewer" $valueName = "ClientID" $wmi = Get-WmiObject -List "StdRegProv" -Namespace root\default -Computername $ComputerName -Credential $credential ($wmi.GetDWORDValue($hklm,$key,$valueName)).uvalue
HKEY_CURRENT_CONFIG (2147483653) HKEY_LOCAL_MACHINE (2147483650) HKEY_CURRENT_USER (2147483649) HKEY_CLASSES_ROOT (2147483648) HKEY_USERS (2147483651)
Использование .NET метода OpenRemoteBaseKey
Для того что бы использовать этот метод, нужно что бы на удаленном компе была запущена служба удаленного реестра.
Но начиная с Windows Vista, по умолчанию, служба удаленного реестра отключена в системе.
Это основной минус данного метода — предварительная подготовка.
Проверить текущий статус службы можно командой
Get-Service RemoteRegistry -ComputerName CompName | select DependentServices
Службу remoteregistry можно запустить удаленно, но это опять же нужно делать в сессии доменного админа
# Устанавливаем режим запуска на Автоматический sc \\Comp config "remoteregistry" start= auto sc \\Comp start "remoteregistry" # Запускаем службу sc \\Comp query "RemoteRegistry" # Проверяем статус
Обращаемся к удаленному реестру
$ComputerName = "CompName" $key = "SOFTWARE\WOW6432Node\TeamViewer" $hive = [Microsoft.Win32.RegistryHive]::LocalMachine $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($hive, $ComputerName) $regKey.OpenSubKey($key).GetValue('ClientID')
Так же, после запуска службы remoteregistry, можно обращаться к удаленному реестру через графический интерфейс оснастки regedit.exe