Скрипт для поиска пользователей в группе Администраторы на серверах

Скрипт проходит по всем серверам из Active Directory , смотрит состав локальной группы Администраторы и сохраняет список в файл. Будет полезным для поддержания безопасности в среде с большим количеством серверов.

Пример скрипта

  1. $ExportFile = «C:tempremotes.csv»
  2. $SearchBase = «OU=Серверы,DC=remontka,DC=local»
  3. $AdminList = @{}
  4. $ToCSV = «»
  5. function Get-LocalAdmin {
  6. param ($strcomputer)
  7. try {
  8. $users = Gwmi win32_groupuser –computer $strcomputer -ErrorAction Stop
  9. } catch {
  10. Write-Host $strcomputer
  11. }
  12. if ($users) {
  13. $admins = $users |? { ($_.groupcomponent –match ‘Администраторы’) -or ($_.groupcomponent –match ‘Administrators’) }
  14. $return = $admins |% {
  15. $_.partcomponent –match “.+Domain=(.+),Name=(.+)$” > $nul
  16. $matches[1].trim(‘»‘) + “” + $matches[2].trim(‘»‘)
  17. }
  18. return $return
  19. }
  20. }
  21. $ServersList = Get-ADComputer -SearchBase $SearchBase -Filter * -Properties OperatingSystem | Where { $_.OperatingSystem -match «Windows» }
  22. $ServersList | Select-Object Name | ForEach-Object {
  23. $UserList = Get-LocalAdmin $_.Name
  24. if ($UserList) {
  25. $AdminList[$_.Name] = $UserList
  26. }
  27. }
  28. $AdminList.Keys | % {
  29. $ServerName = $_
  30. $AdminUsers = $AdminList[$ServerName]
  31. $ToCSV += «$ServerName;$AdminUsers`r`n»
  32. }
  33. if (Test-Path $ExportFile) {
  34. Remove-Item $ExportFile
  35. }
  36. $ToCSV >> $ExportFile

Описание скрипта

1 — 4 Определяем переменные для дальнейшего использования.
1 Путь к файлу, в который будет сохранен результат.
2 Контейнер в Active Directory, в котором находятся учетные записи компьютеров серверов.
3 Создаем и хэш-массив. В Powershell необходимо делать до начала использования.
4 Создаем пустую переменную. Ее будем наполнять списком пользователей, которые входят в группу Администраторы.
6 — 21 Функция для поиска пользователей в группе Администраторы.
7 Функции будет передаваться имя сервера. Его будем сохранять в переменную $strcomputer
8 — 12 Создаем исключение для выполняемой операции. Если запрос не будет выполнен корректно, на экран будет выведено название сервера.
9 Обращаемся в WMI объекту win32_groupuser со списком групп Windows.
11 Если обращение к WMI выполнено с ошибкой (чаще всего из-за недоступности RPC), на экран будет выведено название сервера, к которому в данный момент идет обращение.
13 Условие, при котором проверяется существование переменной со списком групп, полученной в строчке 9
14 Создаем переменную, в которую войдет список пользователей группы Администраторы или Administrators (на серверах с английской версией).
15 — 18 Вытаскиваем пользователей из административной группы и удаляем лишнюю служебную информацию.
19 Функция возвращает список пользователей.
23 Создаем переменную и помещаем в нее список компьютеров, на которых будем искать администраторов. В данном примере, это компьютеры из Active Directory.
24 — 29 Извлекаем по одному сервера, которые были получены в строчке 23.
25 Запускаем функцию и передаем ей имя сервера. Результат работы записываем в переменную $UserList
26 Условие проверяет наличие значения переменной $UserList
27 Если список пользователей есть, добавляем его в массив $AdminList
31 — 35 Перебираем массив $AdminList и пополняем список серверов и администраторов для них.
32 Создаем переменную, в которую запишем имя сервера.
33 Создаем переменную, в которую поместим список пользователей для сервера из строчки 32.
34 В переменной $ToCSV находятся строчки для будущего файла. Каждая строчка — имя сервера и перечень администраторов, разделенные точкой с запятой.
37 — 39 Проверяем наличие в системе файла, в который хотим поместить результат работы скрипта. Если файл существует, удаляем его.
41 Создаем файл выгрузки и помещаем в него список администраторов.
EnglishRussianUkrainian