Exchange Online PowerShell cmdlet 中的通配符搜索

Exchange Online PowerShell cmdlet 中的通配符搜索

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-Objectcmdlet 相同的结果,但速度更快。以下语法将提供相同的结果:

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')}

相关内容