2014-09-02 9 views
1

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

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 

} 
+0

Ваш цикл Еогеасп не имеет никакого смысла. Вы выполняете команду, которая всегда будет возвращать один и тот же результат несколько раз и не имеет ничего общего с переменными, используемыми для установки цикла foreach. –

+0

Я не уверен, что еще я буду делать? Извините, что я новичок в powershell – user1342164

+0

Все в порядке. Ну, вы просто удалите вложенный цикл foreach ($ Member в $ Ou) и возьмите часть из этого блока сценария и поместите его за пределы основного цикла foreach, так как нет смысла многократно запускать его. Лучше всего это сделать, чтобы сначала получить членство в группе, которое дает вам DN каждого члена, поэтому вы можете отфильтровать те, которые не соответствуют интересующему вас подразделению, и считать, что осталось. –

ответ

3

Моего interpetation вашего вопроса в том, что для paricular AD Group вы ищете член COUNT на основе подразделения или контейнера.

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 
Смежные вопросы