2011-09-29 87 views
3

我試圖從AD獲取OU/DC中所有用戶的列表。DirectoryServices過濾器和方法

這是我想出了:

$erroractionpreference = "SilentlyContinue" 
function Get-GroupMembers { 
    $filter = "(&(objectCategory=person)(objectClass=user))" 
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $objSearcher.Filter = $filter 
    $colResults = $objSearcher.FindAll() 

     foreach ($member in $colResults) { 
      $member 
     } 
} 
get-GroupMembers 

如果我改變濾波器

$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin")) 

沒有返回。爲什麼是這樣?
我也想顯示某些值(如帳戶是活動或禁用等),但如果我管$membergm,我什麼都沒有。

任何幫助將不勝感激。

+1

要當心@TiZon您在混合三件事情。 Ajk向您解釋如何在DirectorySearcher中使用ADSI對象,直到PowerShell V1.0爲止。 USlackr正在使用來自PowerShell V2.0上的Seven和W2K8R2上的ActiveDirectory模塊的Cmdlet。 Christian從使用PowerShell V1.0以來的Qest軟件包中使用Cmdlet。所有3個解決方案的工作原理,但不要混合三個 – JPBlanc

+0

@JBBlanc:感謝您的支持! –

回答

4

如果你要搜索一個特定的OU,您可以將其設置爲你的搜索對象的根:

$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin") 
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.SearchRoot = $objOU 

您還可以控制你的搜索範圍。這裏有兩個最相關的選項供您:

# Option 1: Return only users in the 'Admin Accounts' OU 
$objSearcher.SearchScope = "OneLevel" 

# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it 
$objSearcher.SearchScope = "SubTree" 

除非你重寫搜索根目錄和範圍,你會得到執行鍼對當前域的根目錄中的子樹搜索的默認。您可以在此TechNet文章中找到更詳細的信息:

編輯:作爲uSlackr注意到,您的直流分量看起來腥。我將它保留爲我的示例的完整版,但不管您使用何種方法,不完整/格式錯誤的基礎對象名稱都會使搜索更加困難。

+0

謝謝,這工作!我將你的答案與@uSlackr的幫助結合起來 –

1

您可以嘗試使用任務ActiveRolesManagement殼牌ActiveDirectory的下載從這裏:

http://www.quest.com/downloads/

包是免費的,並且是從PowerShell的Active Directory管理更準確的cmdlet。

4

DC組件不完整。它應該是這個樣子:

$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com")) 

但是=管理員,DC = COM應該在這個例子中「admin.com」的廣告域名翻譯這似乎不是DC不正確

這是多少使用Microsoft AD cmdlet更輕鬆。

get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com" 

有關下載和使用的cmdlet的信息可以從TechNet

+0

謝謝,這工作!我將你的答案與@ajk的幫助結合起來 –