powershell 在具有来自电子邮件域阵列的电子邮件地址时筛选收件人

moiiocjp  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(220)

看看我能不能简化收集收件人的流程(通过Get-Recipient),他们至少有一个电子邮件地址属于一系列电子邮件域。我们即将进行剥离,我们需要从混合Exchange 2016/EXO环境中清除这些电子邮件地址(我们的内部广告仍然是权威的,所以一切都是从Exchange 2016运行的,而不是云)我的问题是关于将这些用户的集合收集到一个数组中,然后我可以使用它来进行清理。
这个业务部门实际上有数百个电子邮件域,我可以将其作为一个数组($domains)使用。我知道我可以在这个列表中循环查找具有每个特定电子邮件域的收件人,每次一个域,但这似乎效率低下。
有没有一种方法可以利用我的域数组并使用-Contains一次性检查每个收件人的任何域?我已经尝试了下面的方法,但我的逻辑似乎是错误的:

$List = $Recipients | where {$domains -contains (($_.EmailAddresses.AddressString).split("@")[-1])}

字符串
我只得到了7个项目(一个邮箱,6个公共文件夹),其中应该有数百个收件人,所以我没有正确解析多值EmailMail属性。
所需的最终结果是一个数组,其中包含至少有一个来自$domains数组中某个域的smtp地址的收件人。

0wi1tuuw

0wi1tuuw1#

为了有效地解决这个问题,启动Get-Recipient命令一次,并将其输出存储在一个临时CSV文件中。这个文件可以用于解析和后续的变量构造。
这种方法最大限度地减少了与Exchange Online云的交互次数,确保数据仅检索一次,并且可以在本地文件系统上随时访问,以便进行后续查询。
您也可以将“domains”数组与管道字符连接以创建另一个变量。然后可以使用-match操作符而不是-contains引用此变量以列出匹配的域。

PowerShell

$tmpCsv = "C:\Test\Get-Recipient-Dump.csv";
$domains = @("domain1.com","domain2.org","domain4.com");
$domains = $domains -join "|";

Get-Recipient -ResultSize Unlimited | Export-csv $tmpCsv -NoTypeInformation;

Import-Csv -Path $tmpCsv | 
    Where-Object {$_.EmailAddresses -match $domains} |
        Select DisplayName, EmailAddresses;

字符串

支持资源

相关问题