Вложенные для каждого в PowerShell, чтобы удалить членство в группе объявлений для группы объявлений

#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
 

введите описание изображения здесь
введите описание изображения здесь

Ссылка: https://social.technet.microsoft.com/Forums/ie/en-US/c2e6bc41-30f8-444e-aa63-4cbedc79238f/get-members-list-from-multiple-ad-groups?форум=winserverpowershell

Ответ №2:

  1. Извините @RahulKumarShaw-MT, но ваш ответ не очень полезен. Get-ADGroupMember невозможно указать запрошенные атрибуты, например Mail . Ему нужна не почта группы, а почта пользователя, находящегося за DN участника.
  2. Вы действительно не можете догадаться, к какому классу может принадлежать DN участника. Таким образом, использование Get-ADUser DN, указывающего на группу, в лучшем случае вернет $null. Использование Get-ADObject лучше при работе с таким атрибутом ссылки, как member .
  3. Такой сценарий, как правило, невероятно медленный для средних/больших групп. Избегайте, если вы не знаете, что ваши группы действительно малы.

Лучший подход, но немного сложнее

  1. System.DirectoryServices.DirectorySearcher

Я бы лично использовал Attribute Scope Query очень быстрый и мощный запрос LDAP.

  • верните ссылку участнику DN. (или объект за DN)
  • работает для любого атрибута ссылки, member будучи наиболее часто используемым.
  • вы можете отфильтровать участников, которых хотите вернуть (например, только тех, у кого есть почта, указав фильтр LDAP).
  • вы загружаете только те атрибуты, которые вас интересуют.

Единственная проблема с этим запросом касается многодоменных сред Active Directory, в которых группа содержит участника из другого домена, чем домен группы. Я не знаю точно, что System.DirectoryServices.DirectorySearcher вернет a, но обычно он обычно возвращает ошибку, например Partial Results , и разрешает доступ к списку ссылок, которым вы можете следовать. Это может быть объединено с ReferralChasingOption проверкой автоматического следования ссылкам. Но я не думаю, что в Attribute Scope Query запросе [].

  1. Запрос диапазона

Другой вариант-использовать запрос диапазона для быстрого получения DN участника. Затем выполните итерацию по каждому DN (можно даже выполнить параллельно), чтобы получить нужные атрибуты и при необходимости отфильтровать. Как правило, это связано с использованием [System.Директорские услуги.Протоколы] но поверх этого существуют некоторые модули PowerShell, такие как S. DS.P