Active Directory“ -approx”过滤器运算符如何工作?

时间:2019-08-28 20:25:09

标签: powershell active-directory

今天早些时候讨论了AD Cmdlet -Filter运算符时,我遇到了一个以前从未见过的运算符:-approx。我可以在几个博客和一些TechNet文章中找到提到的该运算符,但是没有发现任何解释该运算符用途的信息。除了定义为“近似等于”或~=之外,我也找不到它的用法示例。在Ruby中进行编程时,我唯一一次使用~=运算符,它可以进行正则表达式匹配,但是在这种情况下,正则表达式匹配似乎并不是它的用法。我得到它返回任何东西的唯一方法是,如果我提供要过滤的属性的确切值,例如本例中的内容:

 Get-AdUser -Filter "samaccountname -approx 'myexactsamaccountname'"

此运算符的正确用法是什么?作为Active Directory管理员使用它可能会有哪些示例?

1 个答案:

答案 0 :(得分:2)

这可能不像您希望的那样令人兴奋,但是...

来自Active Directory Technical Specification §3.1.1.3.1.3.1

  

Active Directory支持[RFC2251] 4.5.1节的approxMatch过滤子句。但是,其实现方式与 equalityMatch相同;例如,如果值相等,则过滤器为true。不执行任何近似。格式为"(X=Y)""(X~=Y)"的过滤子句可以相互自由替换。

(强调)

所以它就在那里,因为RFC2251定义了approxMath作为LDAPv3支持的一组运算符的一部分(并且RFC4511进行了描述),并且Microsoft希望能够声称Active Directory中的LDAP服务器实现符合到LDAPv2和LDAPv3上-因此他们在不更改其行为的情况下添加了它(相关RFC从未规定其实现细节)。这与描述found in RFC4511一致:

  

approxMatch过滤器的值为   某些本地定义的属性类型或子类型   近似匹配算法(例如拼写变化,语音   匹配等)返回TRUE。如果值匹配相等,则它   也满足近似匹配。如果近似匹配是   该属性不支持,应处理此过滤器项   作为equalityMatch

最初的意图可能允许通用或局部近似,或者可能允许跨多个字母的等价匹配。搜索:

(givenName~=thorbjorn)

将返回名称为Torbjorn,Þórrbjorn或Thorbjørn的任何人