PowerShell中Get-Mailbox与Get-MailboxStatistics组合筛选失败求助
解决Exchange PowerShell筛选邮箱的问题
看起来你遇到的问题是在管道中组合Get-Mailbox和Get-MailboxStatistics的筛选条件时出现了冲突。让我帮你拆解问题并给出可行的解决办法:
问题原因
你最初的命令写法有两个核心问题:
Get-MailboxStatistics的-Filter参数是直接从Exchange服务器的统计数据源发起查询,并非对管道传来的邮箱对象做筛选,这会导致和前面Get-Mailbox的筛选逻辑脱节- 动态日期计算
(get-date).adddays(-90)在-Filter参数中无法正常解析,因为这个参数不支持实时的PowerShell表达式计算
正确的命令写法
我们把筛选逻辑拆分,先获取目标邮箱的统计数据,再用Where-Object对结果做二次过滤,就能完美实现你的需求:
Get-Mailbox -Filter 'ExtensionCustomAttribute1 -eq $null' | Get-MailboxStatistics | Where-Object { $_.DisconnectDate -eq $null -and $_.LastLogonTime -gt (Get-Date).AddDays(-90) }
为什么这个写法有效
- 第一步
Get-Mailbox -Filter 'ExtensionCustomAttribute1 -eq $null'先筛选出符合条件的邮箱,这部分你已经验证过是可行的 - 第二步
Get-MailboxStatistics获取这些邮箱的完整统计信息 - 第三步
Where-Object对已拿到的统计对象做精准筛选:- 排除已断开连接的邮箱(
DisconnectDate -eq $null) - 只保留近90天内有登录记录的邮箱(
LastLogonTime -gt (Get-Date).AddDays(-90))
- 排除已断开连接的邮箱(
这样既保证了逻辑清晰,也避免了参数冲突和表达式解析的问题。
内容的提问来源于stack exchange,提问作者jarred power
相关产品推荐
相关产品推荐

