如何用PowerShell将TrustedSendersAndDomains导出为指定格式CSV?
修正后的PowerShell脚本及问题说明
最终可用脚本
# 手动指定用户列表,如需遍历所有邮箱可启用下一行注释 $Users = ("user1", "user2", "user3") # $Users = Get-Mailbox | Select-Object -ExpandProperty Alias $results = @() foreach ($User in $Users) { # 仅调用一次获取用户垃圾邮件配置,避免重复查询 $junkConfig = Get-MailboxJunkEmailConfiguration -Identity $User if ($junkConfig.TrustedSendersAndDomains.Count -gt 0) { # 遍历每个可信发件人/域名,生成独立记录 foreach ($sender in $junkConfig.TrustedSendersAndDomains) { $resultObj = [PSCustomObject]@{ User = $User Trusted_Senders = $sender.ToString() } $results += $resultObj } } else { # 无可信发件人时,生成标记为"none"的记录 $resultObj = [PSCustomObject]@{ User = $User Trusted_Senders = "none" } $results += $resultObj } } # 导出CSV,指定UTF8编码避免乱码 $results | Export-Csv -Path "C:\Users\Leo\export.csv" -NoTypeInformation -Encoding UTF8
原脚本存在的问题
- 第一个脚本:
- 重复调用
Get-MailboxJunkEmailConfiguration,浪费资源 - 在循环外创建
$obj,每次添加成员会导致对象属性重复赋值,且赋值的是整个可信发件人数组而非单个条目 - 未处理无可信发件人的用户,这类用户不会出现在最终CSV中
- 重复调用
- 第二个脚本:
仅用Write-Host输出内容到控制台,未将数据收集到$objfull数组,因此无法导出CSV
修正要点
- 用
[PSCustomObject]替代New-Object创建对象,语法更简洁高效 - 每个可信发件人条目对应一个独立对象,确保CSV中每条记录为「用户名+单个可信发件人」的格式
- 新增无条目用户的处理逻辑,自动添加标记为"none"的记录
- 添加
-Encoding UTF8参数,避免CSV导出后出现中文乱码问题
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

