Como importar um arquivo de texto para o powershell e enviá-lo por email, formatado como HTML

2

Estou tentando obter uma lista de todas as contas do Exchange, formatá-las em ordem decrescente na maior caixa de correio e colocar esses dados em um email em formato HTML para enviar um email para mim. Até agora posso obter os dados, enviá-los para um arquivo de texto, além de criar um e-mail e enviar para mim mesmo. Eu simplesmente não consigo colocar tudo junto. Eu tenho tentado usar ConvertTo-Html, mas parece apenas retornar dados via e-mail como "pageFooterEntry" e "Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo" versus os dados reais. Eu posso fazer com que ele me envie os dados corretos, se eu não disser para o ConvertTo-Html, basta enviar os dados para um arquivo de texto e retirá-los, mas tudo correu junto sem nenhuma formatação. Eu não preciso salvar o arquivo, gostaria apenas de executar o comando, pegar os dados, colocá-los em HTML e enviá-los para mim. Aqui está o que tenho atualmente:

#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 = "[email protected]" # Emails report to this address.
$fromemail = "[email protected]" #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)

Quaisquer pensamentos seriam úteis, obrigado!

    
por Don 06.04.2012 / 22:06

2 respostas

1

você pode tentar o meu que funciona para mim. Você precisa definir todas as variáveis, que devem ser auto-documentadas.

$body = "$(cat $file)"

send-MailMessage -SmtpServer $smtpserver -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Priority high
    
por 06.04.2012 / 22:28
0

Obrigado pela sua ajuda acima. O que você sugeriu funcionou bem para mim em parte, mas eu tive alguns outros problemas de formatação que acabei descobrindo também. Apenas para ajudar a próxima pessoa a procurar, estou postando meu resultado final / configuração também. Pode não ser tão eficiente quanto poderia ser, mas parece funcionar para o que eu queria! Obrigado novamente!

    #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 = "[email protected]" #Emails report to this address.
    $fromemail = "[email protected]" #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
    
por 09.04.2012 / 20:36