2009-07-10 31 views
0

我試圖從Active Directory中使用Powershell獲取一些信息,但我得到了一些奇怪的行爲。這是我的腳本:Powershell對數值與數組的表現有所不同?

$toFind = ('bobjones', 'samsmith') 

filter Get-AdUser { 
    $strFilter = "(&(objectCategory=User)(sAMAccountName=$_))" 

    $objDomain = New-Object System.DirectoryServices.DirectoryEntry 
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $objSearcher.SearchRoot = $objDomain 
    $objSearcher.PageSize = 1000 
    $objSearcher.Filter = $strFilter 

    $colProplist = ("name", "department") 
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)} 

    ($objSearcher.FindAll() | %{$_.Properties}) 
} 

"paul" | get-aduser # Works 
$toFind | get-aduser # Doesn't work?! 

前者打印出我期望的東西,一張屬性表;後者最終只是反覆打印「0 1」,儘管我不知道爲什麼。爲什麼單個案件可以工作,但不是陣列?

回答

1

找出來了,它與PowerShell無關。當您創建的DirectoryEntry:

$objDomain = New-Object System.DirectoryServices.DirectoryEntry 

它會返回爲您的域結果只(也就是說,如果你有一個AD林如「北美洲」和「歐洲」,它只會查詢你所在的一個) 。它只是發生了我所搜索的所有名稱都在另一個域中。

如果您使用構造函數來手動指定域,它工作得很好(還沒有想出如何查詢所有域尚未雖然...)