我正在尝试获取名称以“Users-####-”开头的 AD 组列表(# 是数字 0-9)。
我尝试过使用Get-ADGroup -Filter {name -like "Users-[0-9][0-9][0-9][0-9]-*"}
and Get-ADGroup -Filter {name -like "Users-????-*"}
,但没有结果。
我当然可以使用Get-ADGroup -Filter {name -like "Users-*"}
,但这也将包括所有在 Users- 之后具有四个字符以外的字符的组。
然后我决定尝试使用Where-Object,此代码返回了预期的组
Get-ADGroup -Filter * | Where-Object {$_.Name -like "Users-[0-9][0-9][0-9][0-9]-*"}
根据微软的文档通配符,我尝试过两种方法should有效,但实际上并没有。
有人知道我做错了什么,还是这只是 ADGroup 过滤工作方式中的一个错误?
根据微软有关通配符的文档,我尝试了两种方法应该管用,但他们实际上没有。
这是一个合理的假设,但是-Filter
中的某些 cmdlet 公开的参数ActiveDirectory
模块是一个欺骗性的构造- 它的设计目的是看起来像PowerShell 的本机运算符语法,但 cmdlet 在“幕后”将过滤器表达式转换为有效的 LDAP 查询过滤器:
name -like "Users-*"
# is translated to
(name=Users-*)
$_.Name -like "Users-[0-9][0-9][0-9][0-9]-*"
# is translated to
(Name=Users-[0-9][0-9][0-9][0-9]-*)
由于 LDAP 无法识别通配符范围结构[0-9]
,它最终会在目录存储中查询名称所在的对象字面上地以。。开始Users-[0-9][0-9][0-9][0-9]-
- 同样适用于?
.
Since *
是 LDAP 接受的唯一通配符,您可以获得的最接近的是:
Get-ADGroup -Filter {name -like "Users-*-*"}
然后在客户端进一步过滤结果Where-Object
(在这种情况下,我们返回 PowerShell 执行比较,并且可以再次使用所有通配符):
Get-ADGroup -Filter {name -like "Users-*-*"} | Where-Object Name -like 'Users-[0-9][0-9][0-9][0-9]-*'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)