2009-07-10 32 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林如“北美洲”和“欧洲”,它只会查询你所在的一个) 。它只是发生了我所搜索的所有名称都在另一个域中。

如果您使用构造函数来手动指定域,它工作得很好(还没有想出如何查询所有域尚未虽然...)