Exchange Online PowerShell cmdlet 是否支持通配符?我想创建一个按邮件地址过滤的新地址列表,但无法使其工作。
尽管有用户拥有这样的邮件地址,但是以下命令不会产生任何结果:
Get-Recipient -Filter {(Alias -ne $null) -and (PrimarySmtpAddress -like '*@domain.com')}
当我手动输入整个电子邮件地址时,它会返回结果,因此很明显通配符过滤器不起作用。
那么,不支持通配符吗?如果是这样,那么为什么以下命令在过滤邮件联系人时会返回结果?
Get-Recipient -Filter {(Alias- ne $null) -and (ExternalEmailAddress -like '*@domain.com')}
答案1
您可能遇到的问题之一是某些属性无法与命令的 -Filter 参数一起使用Get-Recipient
。例如:
Get-Mailbox -Filter {(Alias -ne $null) -and (ExternalEmailAddress -like '*@example.com')}
结果是:
无法将参数“Filter”绑定到目标。异常设置“Filter”:“ExternalEmailAddress”不是可识别的可过滤属性。有关可过滤属性的完整列表,请参阅命令帮助。
解决此问题的一种方法需要更长的时间来处理,但有效:获取所有具有别名的收件人,然后使用该Where
函数处理查询的第二部分。生成的命令集如下所示:
(Get-Recipient -Filter {(Alias -ne $null)} -ResultSize Unlimited).Where{$_.EmailAddresses -like "*example.com"}
使用上述Where
方法可获得与管道传输到Where-Object
cmdlet 相同的结果,但速度更快。以下语法将提供相同的结果:
Get-Recipient -Filter {(Alias -ne $null)} -ResultSize Unlimited | Where-Object {$_.EmailAddresses -like "*example.com"}
答案2
根据官方文档Filter 参数的可过滤属性,该cmdlet-Filter
应该支持通配符。
我尝试使用此 cmdlet 运行命令,然后发现username*
允许,但*domain.com
不允许。),它看起来像 cmdlet -RecipientFilter
(在基于云的环境中,您不能使用通配符作为第一个字符。例如,允许使用“Sales*”,但不允许使用“*Sales”。)。
要获取收件人的电子邮件地址,您可以尝试运行以下命令:
Get-Recipient | where{($_.Alias -ne $null) -and ($_.PrimarySmtpAddress -like '*@domain.com')}
或者:
Get-Recipient -Filter {(Alias -ne $null) -and (EmailAddresses -like '*@domain.com')}