Лучший отвечающий
Скрипт по сбору локальных групп на Серверах (Powershell)

Вопрос
-
Добрый день!
Задача, написать скрипт, который соберёт по каждой OU на предприятии, группы которые созданы были в ручную администраторами серверов. Собственно сам скрипт я написал:
cls $OUS = @() $OUS = Get-Content C:\Temp\Scripts\files\OU.txt workflow pingparallel { param ($OUS) ForEach -parallel ($ou in $OUS) { inlinescript { $servers = Get-ADComputer -SearchBase "OU=$Using:ou,DC=nsk,DC=com,DC=ru" ` -Filter {enabled -eq "True" -and OperatingSystem -like 'Windows Server*'} -prop * foreach ($server in $servers) { $testip = Test-Connection -ComputerName $server.Name -Count 2 -ErrorAction SilentlyContinue if ($testip -eq $null) { $server | select name, CanonicalName >> C:\Temp\Scripts\files\for_ank1\not_connect\$Using:ou.txt } else { try { Get-WMIObject -ComputerName $server.Name -Class Win32_Group -Filter "LocalAccount=True" | ?{$_.SID -like "S-1-5-21-*"} | select @{Expression={$server.Name};Label="Server_Name"}, @{Expression={$_.Name};Label="Group_Name"}, @{Expression={$_.SID};Label="SID"} >> C:\Temp\Scripts\files\for_ank1\$Using:ou.txt } catch { $server.Name >> C:\Temp\Scripts\files\for_ank1\not_allow\$Using:ou.txt } } } } } } pingparallel $OUS
Но есть проблема, как фильтровать группы не пойму. как видно из скрипта попробовал фильтровать по SID, но данный SID показывает вообще все локальные группы. Собственно вопрос состоит в том, что добавить в скрипт, чтобы выгрузить только группы созданные пользователями?
1 февраля 2018 г. 10:17
Ответы
-
Внесите изменения в скрипт:
try { Get-WMIObject -ComputerName $server.Name -Class Win32_Group -Filter "LocalAccount=True" | ?{$_.SID -like "S-1-5-21-*"} | select @{Expression={$server.Name};Label="Server_Name"}, @{Expression={$_.Name};Label="Group_Name"}, @{Expression={$_.SID};Label="SID"} }
и
pingparallel $OUS | Export-Csv file.csv -NoTypeInformation -UseCulture -Encoding UTF8
8 февраля 2018 г. 9:40Отвечающий -
Спасибо товарищ Kazun! Оно работает и как надо, только мне не понятно, а как оно так выводится? Ведь в цикле вывод вы убрали.... Спрашиваю потому, что есть ощущение, при таком выводе могут быть "конкурентные записи", которые не отследить, ну мне так кажется...
Убрана 1 единственная строка >> C:\Temp\Scripts\files\for_ank1\$Using:ou.txt - чтобы не было перенаправления в файл, а возвращался объект, которая в цикле так и выполняется.
pingparallel $OUS | Export-Csv - Перенаправит все записи, т.е. будет ждать все данные,а не первый вернувшийся объект. Что будет аналогично:
$result = pingparallel $OUS # Получим все данные
$result | Export-CSV...
- Помечено в качестве ответа eclegolas 9 февраля 2018 г. 6:36
8 февраля 2018 г. 13:58Отвечающий
Все ответы
-
Вам надо получить все SID'ы локальных групп и выбрать только те из них, которые не являются well known SID'ами
my blog: http://shserg.ru/
- Предложено в качестве ответа Vector BCOModerator 8 февраля 2018 г. 8:27
- Отменено предложение в качестве ответа eclegolas 8 февраля 2018 г. 8:31
8 февраля 2018 г. 8:16 -
Добрый день!
Спасибо за ответ! Собственно, я справился с задачей, теперь мне необходимо из полученного результата создать CSV файл, с разделителями, и вот тут пока не знаю как сделать. Пояснение:
результат скрипта, создание текстового файла с следующим содержимым:
Server_Name Group_Name SID
----------- ---------- ---
nsk-serv04 Group_name1 S-1-5-21-*************
nsk-serv04 Group_name2 S-1-5-21-*************Вот как добавить сюда разделители? Чтобы в последствии импортировать эти данные в Excel?
- Изменено eclegolas 8 февраля 2018 г. 8:29 пояснение
8 февраля 2018 г. 8:28 -
Внесите изменения в скрипт:
try { Get-WMIObject -ComputerName $server.Name -Class Win32_Group -Filter "LocalAccount=True" | ?{$_.SID -like "S-1-5-21-*"} | select @{Expression={$server.Name};Label="Server_Name"}, @{Expression={$_.Name};Label="Group_Name"}, @{Expression={$_.SID};Label="SID"} }
и
pingparallel $OUS | Export-Csv file.csv -NoTypeInformation -UseCulture -Encoding UTF8
8 февраля 2018 г. 9:40Отвечающий -
Спасибо товарищ Kazun! Оно работает и как надо, только мне не понятно, а как оно так выводится? Ведь в цикле вывод вы убрали.... Спрашиваю потому, что есть ощущение, при таком выводе могут быть "конкурентные записи", которые не отследить, ну мне так кажется...
- Изменено eclegolas 8 февраля 2018 г. 13:33 пояснение
8 февраля 2018 г. 13:21 -
Спасибо товарищ Kazun! Оно работает и как надо, только мне не понятно, а как оно так выводится? Ведь в цикле вывод вы убрали.... Спрашиваю потому, что есть ощущение, при таком выводе могут быть "конкурентные записи", которые не отследить, ну мне так кажется...
Убрана 1 единственная строка >> C:\Temp\Scripts\files\for_ank1\$Using:ou.txt - чтобы не было перенаправления в файл, а возвращался объект, которая в цикле так и выполняется.
pingparallel $OUS | Export-Csv - Перенаправит все записи, т.е. будет ждать все данные,а не первый вернувшийся объект. Что будет аналогично:
$result = pingparallel $OUS # Получим все данные
$result | Export-CSV...
- Помечено в качестве ответа eclegolas 9 февраля 2018 г. 6:36
8 февраля 2018 г. 13:58Отвечающий -
Спасибо Вам большое!9 февраля 2018 г. 6:36