2013-10-29 31 views
1

我正在嘗試獲取不在AD組中的所有用戶的列表。顯示所有不在AD中的用戶組的用戶

集團所有電子郵件用戶

我已經試過這樣:

Get-ADUser -Filter * -properties memberof | Where-Object {!($_.memberof -like "*all email*")} | measure 

,但它不篩選出正確。有任何想法嗎?

回答

0

memberof屬性可能會返回一個字符串數組,因此您必須遍歷所有字符串(不同組),以確定該組是否不存在於其memberof中。然而,這種方法並不能解決其他團體成員的團體等問題。

我的方法?

1)抓取該All Email Users組的所有成員。如何迭代該組的組成員(如果有的話)以獲得真實成員,網絡上有解決方案。他們的用戶名應該存儲在一個字符串[]中。這不應該太難,但我不知道你是多麼有經驗的w/powershell。

2)從AD獲取所有用戶。還將其用戶名存儲在字符串[]中。

3)在兩個字符串數組上使用diff cmdlet,它將爲您提供在一個[]中存在但不在另一箇中的項目(在這種情況下爲用戶名)。 DIFF基本上是這樣的:

diff $arUsers1 $arUsers2 
1

倘若有嵌套組的「所有電子郵件」組的成員,我添加了-recursive開關get-adGroupMember

我的過程是收集當前在組中的所有用戶,收集所有存在的用戶,然後使用Compare-Object過濾兩個組中未找到的用戶(即不是該用戶的用戶「所有電子郵件」組)。

$usersInGroup = get-adGroupMember -identity <full dn of group> -recursive 
$usersAll = get-adUsers 
$usersNotInGroup = Compare-Object -referenceObject $usersInGroup -differenceObject $usersAll | 
    where-Object {$_.sideIndicator -eq "=>"} 

因爲$usersNotInGroupCompare-Object輸出收集,你會不會有與get-adUsers收集(如果沒有記錯,你就必須要麼的samAccountName或全DN)的豐富的廣告對象。這個應該足以從Active Directory cmdlet獲得結果。