понедельник, 29 сентября 2014 г.

Удаленная ветка реестра пользователя / access remote registry user

Доброго времени суток

Работа с удаленным реестром на первый взгляд кажется простой, пока дело не касается личных параметров пользователя.

Ветка "HKEY_LOCAL_MACHINE" нам всегда доступна удаленно, так как она содержит общие параметры для всех пользователей удаленной машины
Но ветка "HKEY_CURRENT_USER" будет скрыта, так как для каждого пользователя она своя.
В место неё нам предлагаю "HKEY_USERS" которая содержит все ветки "HKEY_CURRENT_USER" всех пользователей когда либо заходивших в удаленную систему
Сложность заключается в том, что все ветки в "HKEY_USERS" именованны SID(ами) пользователей.

Рассмотрим пример получения/записи параметров "HKEY_CURRENT_USER" ветки пользователя который работает на удаленной машине используя PShell.
В качестве примера будет приведен пример изменение таймаута заставки экрана.

$PC = "Host1"

#Узнаем кто залогинен на машине
$User = (Get-WmiObject Win32_ComputerSystem -Computer $PC).username

#Получаем SID залогиненного пользователя из AD
$objUser = New-Object System.Security.Principal.NTAccount($User)
$UserSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$UserSID = $UserSID.Value

#Задаем путь к удаенной ветке с сидом
$key =  $UserSID + "\Control Panel\Desktop\"

#Задаем ссылку на системуную процедуру подключения к реестру
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::Users,$PC)

#Вызываем подключение к удаленному реестру по указанному ранее пути
$key = $reg.OpenSubkey($key,$True)


#Получим параметр интервала заставки пользователя
$key.GetValue("ScreenSaveTimeOut")

#зададим его для удаленного пользователя(занчение в секундах)
$key.SetValue("ScreenSaveTimeOut","60")



PS если вы не видите результата в системе, перезапустите её

Комментариев нет:

Отправить комментарий