POWERSHELL - 呼叫操作员 - 这种结构意味着什么?

时间:2015-10-28 12:39:34

标签: powershell directoryservices directorysearcher

此代码运行良好。它是从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"。

我认为,在这种情况下,它还有其他含义。

2 个答案:

答案 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