我有以下powershell脚本,它绑定到活动目录OU并列出计算机。它似乎工作得很好,除了它输出额外的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 服务器1 Server2上 服务器3
答案 0 :(得分: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}
答案 1 :(得分:1)
我怀疑你的foreach循环在调用PropertiesToLoad.Add时输出结果。
尝试滚接到out-null,如下所示:
foreach ($i in $colPropList){
$objSearcher.PropertiesToLoad.Add($i) | out-null
}