求PowerShell查询脚本:获取30天内收到.one附件邮件的用户及邮件信息
获取Exchange中带.one附件邮件的PowerShell解决方案
针对你需要筛选过去30天内收到带.one附件邮件的需求,推荐使用**合规搜索(Compliance Search)**来实现,这是当前Exchange Online及本地Exchange(2016+)中更可靠且功能完整的搜索方案,可避免旧cmdlet的兼容性问题。以下是具体步骤:
1. 准备工作
- 确保你拥有Compliance Search或eDiscovery Manager角色权限(需在Exchange Admin Center或Microsoft Purview中分配)。
- 已连接到Exchange Online PowerShell(本地Exchange则直接在服务器上运行)。
2. 创建并启动合规搜索
# 计算过去30天的UTC时间范围(适配合规搜索语法) $startDate = (Get-Date).AddDays(-30).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") $endDate = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") # 创建搜索任务:覆盖全组织邮箱,指定附件格式和接收时间范围 New-ComplianceSearch -Name "OneAttachment_Search" ` -ExchangeLocation All ` -ContentMatchQuery "attachment:.one AND received:$startDate..$endDate" # 启动搜索任务 Start-ComplianceSearch -Identity "OneAttachment_Search"
3. 检查进度并导出结果
等待搜索完成,可通过以下命令查看状态:
Get-ComplianceSearch -Identity "OneAttachment_Search" | Select-Object Name, Status, ItemsFound, SizeFound
当状态变为Completed后,提取详细数据并导出到CSV:
# 获取包含预览的搜索结果 $searchResults = Get-ComplianceSearchResult -Identity "OneAttachment_Search" -IncludePreview # 筛选并导出所需字段:收件人、发件人、主题、接收时间、附件名 $searchResults | Select-Object ` @{Name="收件人"; Expression={$_.Recipients -join "; "}}, @{Name="发件人"; Expression={$_.Sender}}, @{Name="邮件主题"; Expression={$_.Subject}}, @{Name="接收时间"; Expression={$_.ReceivedTime}}, @{Name="附件名称"; Expression={$_.Attachments -join "; "}} | Export-Csv -Path "C:\OneAttachment_Results.csv" -Encoding UTF8 -NoTypeInformation
额外说明
- 若仅需提取唯一收件人列表,可直接在PowerShell中处理:
$searchResults.Recipients | Select-Object -Unique | Out-File "C:\Unique_Recipients.txt" -Encoding UTF8 - 旧cmdlet如
Search-Mailbox已被微软弃用,New-MailboxSearch在Exchange Online中功能受限,合规搜索是当前最优选择。 - 使用UTC时间格式可避免时区偏差,确保搜索结果准确覆盖过去30天。
内容的提问来源于stack exchange,提问作者vasimmahmood
相关产品推荐
相关产品推荐

