此代码运行良好。它是从Microsoft复制的。
$strFilter = "(&(objectCategory=person)(objectClass=user))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$colProplist ="Name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{$objItem = $objResult.Properties; $objItem.name }
但是,我不明白为什么老师用过
$strFilter = "(&(objectCategory=person)(objectClass=user))"
因为我从网上获得的所有信息都是这个符号&用于执行代码,一旦其含义为" Call Operator"。
我认为,在这种情况下,它还有其他含义。
答案 0 :(得分:4)
(&(objectCategory=person)(objectClass=user))
等同于编程语言上下文中的以下条件:
objectCategory == person && objectClass == user
记录在MSDN page for DirectorySearcher.Filter Property
:
使用前缀运算符
&
和|
形成复合表达式。 一个例子是"(&(objectClass=user)(lastName= Davis))
"。另一个 示例是"(&(objectClass=printer)(|(building=42)(building=43)))
"。
因此,过滤器应用为:
objectClass=user && lastName= Davis
和
objectClass=printer && ( building=42 || building=43)
分别在提供的代码段中。
答案 1 :(得分:1)
我们谈论LDAP过滤器,请查看Microsoft MSDN以获取更多信息。你的例子也在那里讨论。
或者采用这种方式在Powershell中获得帮助:
Import-Module ActiveDirectory
Get-Help about_ActiveDirectory_Filter
...或在线here