咨询Get-ADComputer -Filter参数支持的正则及特殊字符
Get-ADComputer -Filter 参数的匹配规则说明
Get-ADComputer的-Filter参数不支持标准正则表达式,它使用的是AD专属的查询过滤语法(结合PowerShell表达式的子集),和你之前在计划任务里用的标准正则完全是两套规则,这就是你的正则^ORD\d{3}\$$无法生效的原因。
正确实现需求的写法
你要匹配名称以ORD开头、后跟3个数字的计算机,有两种高效写法:
方法1:PowerShell表达式风格的Filter
用-like结合字符范围限定,精准匹配3个数字:
Get-ADComputer -Filter { Name -like 'ORD[0-9][0-9][0-9]' }
方法2:LDAP过滤语法(更精准)
直接用LDAP格式的过滤规则,原生支持字符范围匹配:
Get-ADComputer -LDAPFilter "(name=ORD[0-9][0-9][0-9])"
-Filter 参数支持的特殊字符与规则
PowerShell表达式风格的-Filter支持以下匹配相关的特殊字符:
*:匹配任意长度的任意字符(包含0个字符)?:匹配单个任意字符[]:匹配括号内的单个字符,支持范围(如[0-9]匹配数字、[a-zA-Z]匹配字母),也支持排除([^0-9]匹配非数字)
同时支持的比较运算符包括:-eq、-ne、-gt、-lt、-like、-notlike
注意:标准正则里的^(行首锚点)、$(行尾锚点)、\d(数字简写)、{n}(重复次数)等语法,在-Filter中完全不生效。
备选方案:用标准正则过滤
如果一定要用标准正则,可以先拉取所有计算机对象,再通过Where-Object过滤(适合小环境,大环境效率较低):
Get-ADComputer -Filter * | Where-Object { $_.Name -match '^ORD\d{3}$' }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

