none
Скрипт по сбору локальных групп на Серверах (Powershell) RRS feed

  • Вопрос

  • Добрый день!

    Задача, написать скрипт, который соберёт по каждой 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


    • Помечено в качестве ответа eclegolas 8 февраля 2018 г. 13:21
    • Снята пометка об ответе eclegolas 8 февраля 2018 г. 13:33
    • Помечено в качестве ответа eclegolas 9 февраля 2018 г. 6:36
    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


    • Помечено в качестве ответа eclegolas 8 февраля 2018 г. 13:21
    • Снята пометка об ответе eclegolas 8 февраля 2018 г. 13:33
    • Помечено в качестве ответа eclegolas 9 февраля 2018 г. 6:36
    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