Управление удаленным реестром

В этой статье приведу несколько примеров работы с реестром на удаленных машинах.

Для примера будем в 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

Добавить комментарий

Ваш адрес email не будет опубликован.