一位客户问了我们一个有点奇怪的问题,要求我们导出他们公司曾经发送过邮件的所有电子邮件地址。
不是他们自己的邮箱地址,而是他们客户、供应商等的所有外部地址。我猜跟踪日志不够用,它不会回溯那么远。
我需要一个 Powershell 命令来“扫描/搜索”所有邮箱和所有电子邮件项目。对于每个电子邮件项目,必须将发件人和收件人地址导出到文件中。我知道如果用户删除了电子邮件,这些地址将不会显示在导出中,因为数据不再存在于电子邮件数据库中。
如果有重复项,则没有问题,我可以稍后使用某些工具过滤掉重复项。客户使用 Exchange 2007。
答案1
如果系统中的收件人少于 9999 人,此方法应该有效。如果收件人更多,只需增加 ResultSize 即可。
$recip = Get-Recipient -ResultSize 9999 | Select-Object
alias,DisplayName,EmailAddresses
$output = @()
# Work thorugh each recipient
$recip | ForEach-Object {
# Work through each Email alias
$_.EmailAddresses | ForEach-Object {
# Clean SMTP from the from of the addresses
$cleaned = $_.TrimStart("smtp:").TrimStart("SMTP:")
# Check and exclude x500 system addresses
if ($cleaned -inotmatch "x500:*") {
$output += $cleaned
}
}
}
$output | Out-File addresses.csv -Force