PowerShell脚本Where-Object过滤块内变量不生效无输出问题
PowerShell变量匹配失效问题修复
问题原因
PowerShell的字符串解析规则中,单引号包裹的字符串不会对内部变量做展开处理,只会原样输出字符串内容。你现有代码中Where-Object筛选条件使用'SMTP:$EmailAddressAlias'写法时,$EmailAddressAlias不会被替换为你输入的实际邮箱地址,只会作为普通字符串匹配,因此无法返回正确结果。
修复方案
将筛选条件中的单引号替换为双引号即可,双引号包裹的字符串会自动解析内部变量。也可额外增加输入非空校验避免空值无效查询,优化后代码如下:
$EmailAddressAlias = Read-Host "请输入要查询关联邮箱的完整邮件地址" # 输入非空校验 if ([string]::IsNullOrWhiteSpace($EmailAddressAlias)) { Write-Host "输入内容不能为空,请重新运行脚本" exit 1 } Get-Mailbox -Identity * | Where-Object {$_.EmailAddresses -like "SMTP:$EmailAddressAlias"} | Format-List Identity, EmailAddresses
补充说明
如果需要做模糊匹配,可在变量前后添加通配符*,写法为"SMTP:*$EmailAddressAlias*",即可匹配所有包含输入内容的SMTP地址。
内容的提问来源于stack exchange,提问作者Mr-Goodbytes
相关产品推荐
相关产品推荐

