Скрипт проходит по всем серверам из Active Directory , смотрит состав локальной группы Администраторы и сохраняет список в файл. Будет полезным для поддержания безопасности в среде с большим количеством серверов.
Пример скрипта
- $ExportFile = «C:tempremotes.csv»
- $SearchBase = «OU=Серверы,DC=remontka,DC=local»
- $AdminList = @{}
- $ToCSV = «»
- function Get-LocalAdmin {
- param ($strcomputer)
- try {
- $users = Gwmi win32_groupuser –computer $strcomputer -ErrorAction Stop
- } catch {
- Write-Host $strcomputer
- }
- if ($users) {
- $admins = $users |? { ($_.groupcomponent –match ‘Администраторы’) -or ($_.groupcomponent –match ‘Administrators’) }
- $return = $admins |% {
- $_.partcomponent –match “.+Domain=(.+),Name=(.+)$” > $nul
- $matches[1].trim(‘»‘) + “” + $matches[2].trim(‘»‘)
- }
- return $return
- }
- }
- $ServersList = Get-ADComputer -SearchBase $SearchBase -Filter * -Properties OperatingSystem | Where { $_.OperatingSystem -match «Windows» }
- $ServersList | Select-Object Name | ForEach-Object {
- $UserList = Get-LocalAdmin $_.Name
- if ($UserList) {
- $AdminList[$_.Name] = $UserList
- }
- }
- $AdminList.Keys | % {
- $ServerName = $_
- $AdminUsers = $AdminList[$ServerName]
- $ToCSV += «$ServerName;$AdminUsers`r`n»
- }
- if (Test-Path $ExportFile) {
- Remove-Item $ExportFile
- }
- $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 | Создаем файл выгрузки и помещаем в него список администраторов. |