Автоматическое Управление С Помощью Удаленного Доступа К Реестру Windows

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

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

А что, если компания большая, а пользователь находится на другом сайте/городе/стране?

Автоматическое управление с помощью удаленного доступа к реестру Windows

Одним из классических инструментов такой работы является удаленное подключение (с помощью RDP, программного обеспечения типа TeamViewer/Skype с общим доступом к рабочему столу и т.п.

).

Однако он не лишен принципиальных недостатков:

  • в любом случае конечный пользователь будет отвлекаться от своей работы (в некоторых случаях даже не видя своего рабочего стола)
  • эти инструменты не всегда будут работать, если на удаленном компьютере есть ошибки
  • установка стороннего программного обеспечения (в том числе проприетарного, в случае TeamViewer) не всегда поощряется политикой компании.

  • метод практически не автоматизирован
Наконец, этот подход используется, когда инцидент уже произошел (сложно представить, чтобы администратор время от времени «профилактически» подключался к каждому пользователю).

Вот почему важен механизм управления (мониторинга) удаленных компьютеров.

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

Они используют реестр для хранения собственных настроек и параметров как ОС, так и встроенных сервисов, а также большинства сторонних программ.

Поэтому содержимое реестра сильно влияет на работу системы.

Исходя из этого, реестр вполне можно использовать как «индикатор» для мониторинга (вы можете обнаружить ошибку, если она связана с неверными параметрами в реестре или смоделировать у себя проблемную ситуацию).

Еще одна возможность, которую дает такое решение – это возможность административного контроля пользователей (например, удаленное чтение позволяет видеть факты установки нежелательных программ и внесения изменений в настройки) – не забывайте о влиянии «человеческого фактора».

по работе системы.

На практике это было полезно в рамках проекта SkypeTime , где нужно было отслеживать исправление настроек в Skype для бизнеса.



Автоматическое управление с помощью удаленного доступа к реестру Windows

Но реестр содержит тысячи записей, и контролировать их все крайне сложно.

Поэтому, прежде всего, нам следует ограничить предмет контроля — определить, какие параметры нам интересны, и выяснить, в каких ветках реестра находятся соответствующие значения.

Как правило, последнее нетрудно найти в документации/интернете или определить самостоятельно по названиям клавиш.

Определившись с предметом управления, можно переходить непосредственно к настройке удаленного доступа.

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

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

Настройка удаленного доступа Чтобы активировать саму службу, в разделе Конфигурация компьютера > Настройки > Настройки панели управления > Службы установите параметры службы RpcSs, как на скриншоте.



Автоматическое управление с помощью удаленного доступа к реестру Windows

Остается только добавить соответствующие исключения брандмауэра.

В той же политике в разделе «Конфигурация компьютера» > «Политики» > «Настройки Windows» > «Параметры безопасности» > «Брандмауэр Windows в режиме повышенной безопасности» > «Правила для входящего трафика» создайте новое правило: Тип правила – Пользовательский

Автоматическое управление с помощью удаленного доступа к реестру Windows

Укажите путь к программе как %SystemRoot%\system32\svchost.exe. В дополнительных настройках в разделе «Службы» установите «Применить к сервису со следующим коротким именем — Winmgmt».



Автоматическое управление с помощью удаленного доступа к реестру Windows

На следующих страницах мы устанавливаем TCP без указания конкретных портов и для всех адресов.



Автоматическое управление с помощью удаленного доступа к реестру Windows



Автоматическое управление с помощью удаленного доступа к реестру Windows

и разрешите подключение ( Разрешить соединение ) для профиля домена

Автоматическое управление с помощью удаленного доступа к реестру Windows



Автоматическое управление с помощью удаленного доступа к реестру Windows

Однако следить «вручную» за реестром десятков и сотен компьютеров (даже если это всего лишь несколько записей) – занятие неблагодарное и бессмысленное.

К счастью, этот процесс довольно легко автоматизировать с помощью скриптов.

Например, следующий сценарий PowerShell позволяет узнать, какие пользователи изменили параметры AwayThreshold и IdleThreshold (время перехода в состояния «Отсутствует» и «Неактивно») для Skype для бизнеса.

Код сценария

   

Param ( [alias("c")] [string]$FromFileComputers, [alias("r")] [string]$OutputRPCErrorsFile, [alias("u")] [string]$FromFileUsers, [alias("o")] [string]$OutputFile="output.csv", [alias("a")] [int]$MinAway, [alias("i")] [int]$MinIdle ) $RPCErrorsArray = @() $result = @() $HKU = 2147483651 $RegistryForCheckArray = "SOFTWARE\Microsoft\Office\13.0\Lync","SOFTWARE\Microsoft\Office\14.0\Lync","SOFTWARE\Microsoft\Office\15.0\Lync","SOFTWARE\Microsoft\Office\16.0\Lync","SOFTWARE\Microsoft\Communicator" $CurrentComputerNumber = 0; if(![string]::IsNullOrEmpty($FromFileUsers)) { $Users = Get-Content $FromFileUsers; } if(![string]::IsNullOrEmpty($FromFileComputers)) { $Comps = Get-Content $FromFileComputers; } else { $date = (get-date).

AddMonths(-1) $Comps = Get-ADComputer -filter { lastlogontimestamp -ge $date } | select name | ForEach-Object {$_.name} #$Comps = "NB_CY" } $ServersCount = ($Comps).

Count; Foreach ($Comp in $Comps) { $CurrentComputerNumber++ try { Write-Host "Checking: $Comp [$CurrentComputerNumber/$ServersCount]"; $profiles = Get-WmiObject Win32_UserProfile -filter "Loaded=$true and special=$false" -ComputerName $Comp -ErrorAction Stop $reg = [wmiclass]"\\$Comp\root\default:stdregprov" Foreach ($profile in $profiles) { $username = Split-Path $profile.LocalPath -Leaf if(![string]::IsNullOrEmpty($FromFileUsers)) { if(!$Users.Contains($username)) { continue; } } Foreach( $registry in $RegistryForCheckArray) { $hkey = "$($profile.sid)\$registry" #Write-Host "KEY: $hkey" $away = $reg.GetDWORDValue($hku,$hkey,"AwayThreshold").

uValue $idle = $reg.GetDWORDValue($hku,$hkey,"IdleThreshold").

uValue $sip = $reg.GetStringValue($hku,$hkey,"ServerSipUri").

sValue if([string]::IsNullOrEmpty($away) -and [string]::IsNullOrEmpty($idle)) { continue; } if(($MinAway -gt 0 -and $away -lt $MinAway) -or ($MinIdle -gt 0 -and $idle -lt $MinIdle)) { continue; } $result += New-Object PsObject -Property @{ "PC" = $Comp "Username" = $username "SIP" = $sip "SFB_Away" = $away "SFB_Idle" = $idle } } } } catch { if ($_.Exception.GetType().

Name -eq "COMException") { $RPCErrorsArray += $Comp; } Write-Host "Error: ($_.Exception.GetType().

Name)"; $_.Exception } } $result | Export-csv -Path $OutputFile $result | Format-Table -Property PC,Username,SIP,SFB_Away,SFB_Idle -AutoSize Write-Host "Saved to: $OutputFile" if(![string]::IsNullOrEmpty($OutputRPCErrorsFile)) { $RPCErrorsArray | out-file $OutputRPCErrorsFile Write-Host "RPC errors saved to: $OutputRPCErrorsFile" }

Для большего удобства скрипт можно запустить со следующими параметрами: -c путь к файлу со списком имен компьютеров для проверки; если не указано, получает компьютеры из AD с активностью в течение 30 дней.

-r путь к файлу, в котором будут записаны имена хостов компьютеров, на которых произошла ошибка RPC. -u путь к файлу со списком пользователей (логин), если не указан, проверяет всех.

-o путь к файлу, который будет содержать результат работы скрипта, по умолчанию выходной.

csv. -a — минимальное значение параметра AwayThreshold; записи со значением меньше указанного значения не будут включены в результат выполнения скрипта.

-i — минимальное значение параметра IdleThreshold; записи со значением меньше указанного значения не будут включены в результат выполнения скрипта.

Кроме того, запуск сценария можно автоматизировать, добавив его в планировщик задач Windows или с помощью функции запланированного задания в PowerShell. Теги: #реестр Windows #Системное администрирование #удаленный доступ

Вместе с данным постом часто просматривают: