Вопрос или проблема
Как мне проверить, существуют ли указанные группы безопасности? Я также хотел бы, чтобы экспортированный файл .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
Объяснение скрипта
-
Загрузка групп из файла: С помощью
Get-Content
вы загружаете список групп из указанного текстового файла. -
Проверка существования группы: Используется
Get-ADGroup
с фильтром для проверки на наличие группы. В случае ошибки (группа не найдена) устанавливается обработка-ErrorAction SilentlyContinue
, чтобы убрать ненужные сообщения об ошибках. -
Получение участников группы:
Get-ADGroupMember
извлекает членов существующей группы. Если у группы нет участников, в результате будет записано "No members". -
Формирование результата: Создаются пользовательские объекты (
PSCustomObject
) для удобного представления результатов. Члены групп объединяются в строку, разделенную запятыми (используя-join
). -
Экспорт в CSV: Результаты сохраняются в CSV-файл с указанием хранилища и без типов данных с помощью
-NoTypeInformation
. Кодировка UTF8 используется для более лучшей поддержки символов.
Заключение
Таким образом, доработанный скрипт не только проверяет существование указанных групп, но и корректно обрабатывает ситуации с отсутствием у группы членов, экспортируя результаты в CSV-файл с ясной и структурированной информацией.