Получение участников групп для нескольких групп

Вопрос или проблема

Как мне проверить, существуют ли указанные группы безопасности? Я также хотел бы, чтобы экспортированный файл .csv упоминал ‘Нет участников’ вместо того, чтобы пропускать его.

Кроме того, как мне улучшить приведенный ниже скрипт? И я хотел бы получить информацию о членах.

$group_list = get-content C:\temp\group_list.txt

$results = foreach($group in $group_list){

$checkgroup = get-adgroup -filter {name -eq $group} | select name

if($checkgroup -ne $null){
                    
    $members = get-adgroupmember $group | select samaccountname
    
    if($members -ne $null){
    [PSCustomObject]@{GroupName=$group;Members=($members.samaccountname | Out-String).Trim()}
    }
    else{
    [PSCustomObject]@{GroupName=$group;Members="Нет участников"}
    }    
}
else{
    [PSCustomObject]@{GroupName=$group;Members="Группа не существует"}
}
}

$results | Export-csv C:\temp\Group_Members.csv -NoTypeInformation

# вывод групп активного каталога и участников в csv (также вывод пустых групп со значением 'Нет участников')
# предполагается, что выполняется на контроллере домена или импорт модуля ActiveDirectory

$allgroups = Get-ADGroup -Filter *

$result = foreach ( $group in $allgroups ) {

    $hash = @{GroupName=$group.SamAccountName;Member=""}
    $groupid = $group.distinguishedname
    
    if ( $members = Get-ADGroupMember $groupid ) {
            
            foreach ( $member in $members ) {

                $hash.Member = $member.Name
                New-Object psObject -Property $hash
            }
    }
    else {
        $displayname = "Нет участников"
        $hash.Member = $displayname
        New-Object psObject -Property $hash
    }
}

$result | Export-Csv -Path C:\temp\ADGroups.csv -NoTypeInformation

# Конец

Ответ или решение

Для решения поставленной задачи по проверке существования групп безопасности в Active Directory и извлечению списка их участников, вам необходимо внести некоторые улучшения в предоставленный вами скрипт PowerShell. Ниже приведен доработанный скрипт, который отвечает всем вашим требованиям, включая экспорт в CSV-файл с информацией о группах и их участниках.

Доработанный скрипт PowerShell

# Загрузка списка групп из файла
$group_list = Get-Content C:\temp\group_list.txt

$results = foreach ($group in $group_list) {
    # Проверка существования группы
    $checkgroup = Get-ADGroup -Filter "Name -eq '$group'" -ErrorAction SilentlyContinue

    if ($checkgroup) {
        # Получение участников группы
        $members = Get-ADGroupMember -Identity $checkgroup -ErrorAction SilentlyContinue

        if ($members) {
            # Формирование результата с именами участников
            [PSCustomObject]@{
                GroupName = $group
                Members   = ($members | Select-Object -ExpandProperty SamAccountName) -join ', '
            }
        } else {
            # Группа существует, но участников нет
            [PSCustomObject]@{
                GroupName = $group
                Members   = "No members"
            }
        }
    } else {
        # Группа не существует
        [PSCustomObject]@{
            GroupName = $group
            Members   = "Group does not exist"
        }
    }
}

# Экспорт результатов в CSV
$results | Export-Csv C:\temp\Group_Members.csv -NoTypeInformation -Encoding UTF8

Объяснение скрипта

  1. Загрузка групп из файла: С помощью Get-Content вы загружаете список групп из указанного текстового файла.

  2. Проверка существования группы: Используется Get-ADGroup с фильтром для проверки на наличие группы. В случае ошибки (группа не найдена) устанавливается обработка -ErrorAction SilentlyContinue, чтобы убрать ненужные сообщения об ошибках.

  3. Получение участников группы: Get-ADGroupMember извлекает членов существующей группы. Если у группы нет участников, в результате будет записано "No members".

  4. Формирование результата: Создаются пользовательские объекты (PSCustomObject) для удобного представления результатов. Члены групп объединяются в строку, разделенную запятыми (используя -join).

  5. Экспорт в CSV: Результаты сохраняются в CSV-файл с указанием хранилища и без типов данных с помощью -NoTypeInformation. Кодировка UTF8 используется для более лучшей поддержки символов.

Заключение

Таким образом, доработанный скрипт не только проверяет существование указанных групп, но и корректно обрабатывает ситуации с отсутствием у группы членов, экспортируя результаты в CSV-файл с ясной и структурированной информацией.

Оцените материал
Добавить комментарий

Капча загружается...