Доброго времени суток
Работа с удаленным реестром на первый взгляд кажется простой, пока дело не касается личных параметров пользователя.
Ветка "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 если вы не видите результата в системе, перезапустите её
Работа с удаленным реестром на первый взгляд кажется простой, пока дело не касается личных параметров пользователя.
Ветка "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 если вы не видите результата в системе, перезапустите её
Комментариев нет:
Отправить комментарий