#powershell #active-directory
Вопрос:
Я пытаюсь вытащить участников из списка групп объявлений, Get-ADGroupMember сталкивается с проблемой с максимальным количеством участников, поэтому я попытался получить-ADGroup, а затем расширить участников, но я не получаю вывод в выходном файле.
Import-Module ActiveDirectory
$LogDate = get-date -f "dd-MM-yy"
$groups = "Group1", "Group2", "Group3"
foreach ($group in $groups) {
$results = Get-ADGroup $group -properties member | select-object -expandproperty member | ForEach {
Get-ADUser "$_" -properties displayname,mail | Select GivenName,Surname,DisplayName,SamAccountName,Mail,enabled
}
$results |
Select-Object @{Label = "First Name";Expression = {$_.GivenName}},
@{Label = "Last Name";Expression = {$_.Surname}},
@{Label = "Display Name";Expression = {$_.DisplayName}},
@{Label = "Logon Name";Expression = {$_.sAMAccountName}},
@{Label = "Email";Expression = {$_.Mail}},
@{Label = "Account Status";Expression = {if (($_.Enabled -eq 'TRUE') ) {'Enabled'} Else {'Disabled'}}},
@{Label = "Group";Expression = {$group}} |
Export-csv F:GroupMemberShip_$LogDate.csv -NoTypeInformation
}
Комментарии:
1. Привет, Алан, Если мой ответ вам полезен, вы можете принять его как ответ( нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.). Это может быть полезно для других членов сообщества. Спасибо
Ответ №1:
Я попробовал использовать приведенный ниже сценарий PowerShell и смог получить список участников списка групп объявлений.
$groups = "Group1", "Group2", "Group3"
$results = foreach ($group in $groups) {
Get-ADGroupMember $group | select samaccountname, name, @{n='GroupName';e={$group}}, @{n='Description';e={(Get-ADGroup $group -Properties description).description}}
}
$results
$results | Export-csv C:GroupMemberShip.txt -NoTypeInformation
Ответ №2:
- Извините @RahulKumarShaw-MT, но ваш ответ не очень полезен.
Get-ADGroupMember
невозможно указать запрошенные атрибуты, напримерMail
. Ему нужна не почта группы, а почта пользователя, находящегося за DN участника. - Вы действительно не можете догадаться, к какому классу может принадлежать DN участника. Таким образом, использование
Get-ADUser
DN, указывающего на группу, в лучшем случае вернет $null. ИспользованиеGet-ADObject
лучше при работе с таким атрибутом ссылки, какmember
. - Такой сценарий, как правило, невероятно медленный для средних/больших групп. Избегайте, если вы не знаете, что ваши группы действительно малы.
Лучший подход, но немного сложнее
Я бы лично использовал Attribute Scope Query
очень быстрый и мощный запрос LDAP.
- верните ссылку участнику DN. (или объект за DN)
- работает для любого атрибута ссылки,
member
будучи наиболее часто используемым. - вы можете отфильтровать участников, которых хотите вернуть (например, только тех, у кого есть почта, указав фильтр LDAP).
- вы загружаете только те атрибуты, которые вас интересуют.
Единственная проблема с этим запросом касается многодоменных сред Active Directory, в которых группа содержит участника из другого домена, чем домен группы. Я не знаю точно, что System.DirectoryServices.DirectorySearcher
вернет a, но обычно он обычно возвращает ошибку, например Partial Results
, и разрешает доступ к списку ссылок, которым вы можете следовать. Это может быть объединено с ReferralChasingOption
проверкой автоматического следования ссылкам. Но я не думаю, что в Attribute Scope Query
запросе [].
- Запрос диапазона
Другой вариант-использовать запрос диапазона для быстрого получения DN участника. Затем выполните итерацию по каждому DN (можно даже выполнить параллельно), чтобы получить нужные атрибуты и при необходимости отфильтровать. Как правило, это связано с использованием [System.Директорские услуги.Протоколы] но поверх этого существуют некоторые модули PowerShell, такие как S. DS.P