EXO环境下使用PowerShell获取O365租户收件人邮箱别名的方案咨询
EXO获取O365租户所有收件人SMTP别名的实现方案
问题根因
本地Exchange的Get-Recipient返回的EmailAddresses是ProxyAddressCollection类型的结构化对象,自带拆分好的SmtpAddress属性,所以可以直接通过嵌套Select-Object提取。而EXO的Get-EXORecipient为了优化接口传输效率,直接返回字符串数组格式的邮件地址列表,展开后就是纯字符串,没有附属属性,所以原来的写法只会读取到字符串的Length属性。
最优实现方案
方案1:结构化输出(推荐)
输出标准PowerShell对象,后续可直接用于筛选、排序、导出CSV等操作,适配性最高:
Get-EXORecipient | ForEach-Object { $recipientName = $_.Name $samAccount = $_.SamAccountName # 遍历每个别名单独输出一行 $_.EmailAddresses | ForEach-Object { [PSCustomObject]@{ 收件人名称 = $recipientName 账户名 = $samAccount SMTP别名 = $_ } } }
如果需要直接导出为CSV文件,只需要在末尾追加导出命令即可:| Export-Csv -Path "C:\O365收件人别名列表.csv" -NoTypeInformation -Encoding UTF8
方案2:精简写法
如果不需要结构化输出,只需要快速打印结果,比你当前的写法更简洁,无需显式调用Write-Output:Get-EXORecipient | % { $currentName = $_.Name; $_.EmailAddresses | % { "$currentName,$_" } }
内容的提问来源于stack exchange,提问作者NitrusCS
相关产品推荐
相关产品推荐

