2014-09-02 19 views
1

是否有可能根據OU獲得屬於特定組的成員數?當我運行下面的代碼時,如果只有一個OU的值爲3,其餘的值應爲0,則每個OU的值爲3。它正在運行Get-ADGroupMember -Identity「Test_Group」)。計算整個活動目錄結構,而不僅僅是針對每個OU?獲取活動目錄組成員的數量?

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循環沒有任何意義。你正在運行一個總是要多次返回相同結果的命令,並且與用於建立foreach循環的變量無關。 – 2014-09-02 12:18:38

+0

我不知道我還能做什麼呢?抱歉,我是新的PowerShell – user1342164 2014-09-02 12:21:03

+0

沒關係。那麼你只需要刪除嵌套的foreach循環($ Ou中的$ Member)並從該腳本塊中取出該部分,並將其放在主foreach循環之外,因爲沒有必要反覆運行該循環。要做到這一點,更好的方法是首先獲取組成員資格,從而爲每個成員提供DN,以便過濾那些與您所關心的OU不匹配的數據,並計算剩餘的數量。 – 2014-09-02 12:32:02

回答

3

我的問題的實踐是,對於一個特定的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