PowerShell中Get-ADUser用ANR搜索AD用户时$("smtp:$user")报错如何解决
报错原因
Get-ADUser的-Filter参数的脚本块语法仅支持简单的变量引用,不支持在脚本块内部执行子表达式计算、方法调用等复杂运算。你在Filter内写的$("smtp:$user")属于嵌套子表达式,AD PowerShell提供程序解析Filter时无法正确识别该表达式的计算结果,因此抛出参数无效的错误。
可行解决方案
你可以选择任意一种方式实现相同的检索需求:
方案1:提前计算查询值(推荐,可读性更高)
提前在Filter外部完成smtp前缀的拼接,避免在Filter内部做复杂运算:
# 先构造带smtp前缀的查询参数 $smtpQueryValue = "smtp:$user" # 执行AD查询,需要返回邮箱字段可加上-Properties EmailAddress Get-ADUser -Filter {(anr -eq $user) -or (anr -eq $smtpQueryValue)} -Properties EmailAddress
方案2:使用字符串格式Filter
直接使用字符串格式的Filter条件,变量可以直接在字符串内完成插值:
Get-ADUser -Filter "anr -eq '$user' -or anr -eq 'smtp:$user'" -Properties EmailAddress
补充说明
ANR(模糊名称解析)本身默认已经覆盖了姓名、SAM账号、显示名、邮箱前缀等常见属性的匹配,如果你需要额外匹配完整SMTP邮箱地址,加上smtp前缀的条件即可满足统一检索的需求。
内容的提问来源于stack exchange,提问作者Bill Addison
相关产品推荐
相关产品推荐

