Получить количество членов активной группы каталогов?

Можно ли получить количество членов, принадлежащих определенной группе на основе OU? Когда я запускаю код ниже, он дает мне значение 3 для каждого OU, когда есть только 1 OU, значение которого равно 3, остальное должно быть 0. Оно запускает Get-ADGroupMember -Identity "Test_Group").count против всей активной структуры каталогов, а не только для каждого подразделения?

import-module activedirectory
foreach ($ou in Get-ADOrganizationalUnit -filter * -SearchScope 1){

 $computers = 0 + (get-adcomputer -filter * -searchbase $ou.distinguishedname).count 


 $ou | add-member -membertype noteproperty -name Computers -value $computers -force 


 Foreach ($Member in $ou){

 (Get-ADGroupMember -Identity "Test_Group").count 

 }

 $ou | select name,computers 

}
1 ответ

Мое толкование вашего вопроса заключается в том, что для персональной группы AD вы ищете членский счет на основе OU или контейнера.

Get-ADGroupMember -Identity "insert_your_group" -Recursive | 
 Where-Object{$_.objectClass -eq "User"} |
 Get-ADUser -Properties canonicalname | 
 Select-Object @{Name='Container';Expression={$_.canonicalname | split-path -parent}} |
 Group-Object container |
 Select Name,Count

Нарушение этого строя

  1. Возьмите всех членов определенной группы, включая членов других групп.
  2. Убедитесь, что мы обрабатываем пользователей, а не сами группы. У нас уже есть все пользователи из -Recursive поэтому их можно игнорировать.
  3. Получите все пользовательские объекты с помощью вызова Get-ADUser. Нам нужно canonicalname как мы получаем информацию для родительского контейнера
  4. Вот забавная часть. Используя canonicalname разделите его (как и на каталог) и просто возьмите часть -parent.
  5. Группируйте объекты, чтобы получить счет, который вы ищете
  6. Упростите вывод с помощью выбранного состояния.

Вывод

Name Count
---- -----
Domain.Local\OU\SubOU 8
Domain.Local\OU\SubOU2 8
Domain.Local\OU\SubOU5 2

licensed under cc by-sa 3.0 with attribution.