PowerShell遍历Exchange邮箱统计结果无法在邮件中显示问题求解
问题原因
- 变量拼写错误:循环内追加统计结果时使用的变量名是
$messsage(多了1个s),结果没有写入最终用来发信的$message变量。 - 格式化对象无法直接拼接:
ft(Format-Table)返回的是控制台专用的格式化对象,不是可直接拼接的文本内容,即使拼写正确也无法正常显示在邮件中。 - 未做HTML适配:你启用了
-BodyAsHtml参数,纯文本表格需要特殊处理才能保留格式,否则会出现换行丢失、排版混乱的问题。
解决方案
修正后的完整代码如下,调整了变量拼写,将统计结果转为带格式的纯文本后用<pre>标签包裹保证排版正常,同时添加了变量初始化避免异常:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://ExchangeServer/PowerShell -Authentication Kerberos Import-PSSession $Session -AllowClobber $Users = 'user1','User2','user3','user4' # 初始化邮件正文变量 $message = "" foreach($user in $users) { $message += "------------- <br>" $message +="checking user.... $user <br>" $message += "------------- <br>" # 查询统计结果,转为纯文本表格后用pre标签包裹适配HTML显示 $report = Get-MailboxFolderStatistics $user | Where-Object {$_.name -in 'Top of Information Store','Recoverable Items','Deletions','Purges','Versions'} | Select-Object Name, ItemsInFolder, FolderAndSubFolderSize | Format-Table -AutoSize | Out-String $message += "<pre>$report</pre><br>" } Send-MailMessage -SmtpServer smtpserver.domain.com -From Sender@domain.com -To MyEmailAddress@domain.com -Subject "Litigation Mailbox Size Report" -Body $message -BodyAsHtml Get-PSSession | Remove-PSSession
额外优化:将多个
-or判断替换为-in操作符,代码更简洁易读。
内容的提问来源于stack exchange,提问作者TDx2
相关产品推荐
相关产品推荐

