Powershell Get-ADUser -Filter 变量搭配通配符的正确引号引用问题
PowerShell Get-ADUser 模糊查询语法问题解决方案
问题根因
你遇到的两个报错/无结果的原因分别是:
- 第一种写法错误:AD Filter 要求
like后的匹配模式必须是带引号的字符串类型,你直接输出了*Doe*John*没有包裹引号,触发语法错误。 - 第二种写法错误:PowerShell 单引号包裹的内容不会解析内部变量,所以
$LastADname、$FirstADname没有被替换为实际值,导致查询无结果。
额外注意:你示例代码中的变量名存在拼写错误$FistADname,正确应为$FirstADname,请先修正避免变量为空导致的查询异常。
可行解决方案
方案1:双引号嵌套单引号(最简便)
外层用双引号包裹整个Filter规则,保证内部变量可以正常解析,内层用单引号包裹通配符匹配字符串即可:
$LastADname = "John" $FirstADname = "Doe" Get-ADUser -Filter "Name -like '*$LastADname*$FirstADname*'"
方案2:提前拼接匹配规则(可读性更高)
先单独拼接好带通配符的匹配字符串,再传入Filter规则,适合复杂过滤场景,减少引号嵌套混乱:
$LastADname = "John" $FirstADname = "Doe" $matchStr = "*$LastADname*$FirstADname*" Get-ADUser -Filter "Name -like '$matchStr'"
方案3:脚本块格式写Filter
直接用脚本块语法定义Filter,不需要处理引号嵌套问题,变量可正常解析:
$LastADname = "John" $FirstADname = "Doe" Get-ADUser -Filter {Name -like "*$LastADname*$FirstADname*"}
额外注意事项
如果查询的姓名中包含单引号,需要提前转义避免语法错误,转义方式为将单引号替换为两个单引号:
# 示例:姓名含单引号的处理 $LastADname = $LastADname.Replace("'","''")
内容的提问来源于stack exchange,提问作者Slippy
相关产品推荐
相关产品推荐

