1

我有以下绑定到活动目录 OU 并列出计算机的 powershell 脚本。它似乎工作正常,只是它输出了一个额外的 0 - 我不知道为什么。任何人都可以帮忙吗?

 $strCategory = "computer"

 $objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://          OU=Computers,OU=datacenter,DC=ourdomain,DC=local")

 $objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain)
 $objSearcher.Filter = ("(objectCategory=$strCategory)")

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

 $colResults = $objSearcher.FindAll()

 foreach ($objResult in $colResults)
 {
 $objComputer = $objResult.Properties; 
 $objComputer.name
 }

输出: 0 Server1 Server2 Server3

4

2 回答 2

5

您需要捕获(或忽略)PropertiesToLoad.Add 方法的输出,否则您将获得 $colPropList 中每个属性的值。

foreach ($i in $colPropList){[void]$objSearcher.PropertiesToLoad.Add($i)}

您可以简化和缩短脚本并在一次调用中加载一堆属性,而无需使用 foreach 循环。AddRange 方法的另一个好处是它不输出请求属性的长度,因此无需捕获任何内容。

$strCategory = "computer"
$colProplist = "name","distinguishedname"

$searcher = [adsisearcher]"(objectCategory=$strCategory)"
$searcher.PropertiesToLoad.AddRange($colProplist)
$searcher.FindAll() | Foreach-Object {$_.Properties}
于 2012-10-31T18:14:19.317 回答
1

我怀疑您的 foreach 循环在调用 PropertiesToLoad.Add 时正在输出结果。

尝试管道到out-null,如下所示:

foreach ($i in $colPropList){
    $objSearcher.PropertiesToLoad.Add($i) | out-null
}
于 2012-10-31T18:17:09.583 回答