Я пытаюсь получить список всех учетных записей Exchange, отформатировать их в порядке убывания от самого большого почтового ящика и поместить эти данные в электронное письмо в формате HTML, чтобы отправить его самому себе. Пока я могу получить данные, отправить их в текстовый файл, а также создать электронное письмо и отправить самому себе. Я просто не могу собрать все это вместе. Я пытался использовать ConvertTo-Html, но мне кажется, что он просто возвращает данные по электронной почте, такие как pageFooterEntry и Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo, а не фактические данные. Я могу заставить его отправить мне правильные данные, если я не скажу его ConvertTo-Html, просто пусть он передает данные в текстовый файл и извлекает из него, но все это работает вместе без форматирования. Мне не нужно сохранять файл, я просто хочу запустить команду, получить данные, поместить их в HTML и отправить себе по почте. Вот что у меня есть сейчас:
#Connects to Database and returns information on all users, organized by Total Item Size, User
$body = Get-MailboxStatistics -database "Mailbox Database 0846468905" | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | ft @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} -auto | ConvertTo-Html
#Pause for 5 seconds for Exchange
write-host -foregroundcolor Green "Pausing for 5 seconds for Exchange"
Start-Sleep -s 5
$toemail = "me@example.com" # Emails report to this address.
$fromemail = "me@example.com" #Emails from this address.
$server = "Exchange.company.com" #Exchange server - SMTP.
#Email the report.
$email = New-Object System.Net.Mail.MailMessage
$email.IsBodyHtml = $True
$email.To.Add($toemail)
$email.From = $fromemail
$email.Subject = "Exchange Mailbox Sizes"
$email.Body = $body
$client = New-Object System.Net.Mail.SmtpClient $server
$client.UseDefaultCredentials = $true
$client.Send($email)
Любые мысли были бы полезны, спасибо!
вы можете попробовать мою, которая работает для меня. Вам нужно установить все переменные, которые должны все самодокументировать.
$body = "$(cat $file)"
send-MailMessage -SmtpServer $smtpserver -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Priority high
Спасибо за вашу помощь выше. То, что вы предложили, отчасти сработало для меня, но у меня были и другие проблемы с форматированием, которые я тоже решил. Чтобы помочь следующему, я также публикую свой конечный результат / конфигурацию. Возможно, это не так эффективно, как могло бы быть, но, похоже, оно работает для того, что я хотел! Еще раз спасибо!
#Connects to Database and returns information on all users, organized by DisplayName, ItemCount, TotalItemSize
$body = Get-MailboxStatistics -database "Mailbox Database 0846468905" | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | ConvertTo-Html -property DisplayName, ItemCount, TotalItemSize
#Pause for 3 seconds for Exchange to write the file.
Start-Sleep -s 3
$toemail = "me@example.com" #Emails report to this address.
$fromemail = "me@example.com" #Emails report from this address.
$server = "Exchange.company.com" #Exchange server - SMTP.
$HTMLmessage = @"
<font color=""black"" face=""Arial, Verdana"" size=""3"">
<br>
<body BGCOLOR=""white"">
$body
</body>
"@
#Email the report.
Send-MailMessage -smtpServer $server -to $toemail -from $fromemail -subject "Exchange Mailbox Sizes" -body $HTMLmessage -BodyAsHtml -priority High