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

Обновлено и опубликовано Опубликовано:

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

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

  1. $ExportFile = "C:\temp\remotes.csv"
  2. $SearchBase = "OU=Серверы,DC=dmosk,DC=local"
  3. $AdminList = @{}
  4. $ToCSV = ""
  5.  
  6. function Get-LocalAdmin { 
  7.     param ($strcomputer)
  8.     try {
  9.        $users = Gwmi win32_groupuser –computer $strcomputer -ErrorAction Stop
  10.     } catch {
  11.         Write-Host $strcomputer
  12.     }
  13.     if ($users) {
  14.         $admins = $users |? { ($_.groupcomponent –match 'Администраторы') -or ($_.groupcomponent –match 'Administrators') }
  15.         $return = $admins |% { 
  16.             $_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul 
  17.             $matches[1].trim('"') + “\” + $matches[2].trim('"') 
  18.         }
  19.         return $return
  20.     }
  21. }
  22.  
  23. $ServersList = Get-ADComputer -SearchBase $SearchBase -Filter * -Properties OperatingSystem | Where { $_.OperatingSystem -match "Windows" }
  24. $ServersList | Select-Object Name | ForEach-Object {
  25.     $UserList = Get-LocalAdmin $_.Name
  26.     if ($UserList) {
  27.         $AdminList[$_.Name] = $UserList
  28.     }
  29. }
  30.  
  31. $AdminList.Keys | % {
  32.     $ServerName = $_
  33.     $AdminUsers = $AdminList[$ServerName]
  34.     $ToCSV += "$ServerName;$AdminUsers`r`n"
  35. }
  36.  
  37. if (Test-Path $ExportFile) {
  38.     Remove-Item $ExportFile
  39. }
  40.  
  41. $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 Создаем файл выгрузки и помещаем в него список администраторов.
# Active Directory # Powershell # Windows # Безопасность # Серверы
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет