1

I am new to Powershell, I am a junior admin for a VMware environment. I am trying to automate a weekly report for snapshots in PowerCli. I am making the script in Powershell.

I have made a simple css, and I had the e-mail send successfully out with the html table as an attachment. I used convertto-html with the cssuri option, then send-mailmessage after that.

But, even better, would be to have it show up directly in our gmail inbox, without having to download any attachment. That's where I'm stuck. I got it to email, but it shows it as plain text - no nice formatting happens.

With the latest script, it looks like this.

make the "creds" file first and drop it into a directory.

Write-Host "`n Starting script, connecting to server" -ForegroundColor Green

$creds = Get-VICredentialStoreItem -file "D:\Documents and Settings\creds"
connect-viserver -server $creds.Host -User $creds.User -Password $creds.Password
Start-Sleep -s 30

Write-Host "`n Connection to server complete" -ForegroundColor Green
Write-Host "`n Pulling data from Win03vc02" -ForegroundColor Green

$date = Get-Date
$dateforname = Get-Date -UFormat '%m-%d-%Y-%H%M%S'
$filename = "VMsnapshots_" + $dateforname + ".html"

$Report=@"
<style type='text/css'>
table
    {
        Margin: 2px 2px 2px 2px;
        Border-collapse: collapse;

        Font-Family: Calibri;
        Font-Size: 12pt;
        Background-Color: rgb(252, 252, 252);
    }
table, td
    {
        border-style: solid;
        border-color: #E0E0E0;
        border-width: 1px;
    }
tr:hover td
    {
        Background-Color: #6699CC;
        Color: rgb(255, 255, 255);
    }
tr:nth-child(even)
    {
        Background-Color: #eef;
    }
th
    {
        Text-Align: Left;
        Color: #6699CC;
        Padding: 5px 5px 5px 5px;
        Background-Color: #484848;
        Font-Size: 14pt;
    }
td
    {
        Vertical-Align: Top;
        Padding: 5px 5px 5px 5px;
    }
</style>
"@

$Report += Get-VM | Get-Snapshot | Select-Object VM,VMId,Description,PowerState,SizeGB | ConvertTo-Html -Fragment
Write-Host "`n Data pulled, sending mail in 60 seconds..." -ForegroundColor green

Start-Sleep -s 60

$from = "o"
$to = "i","j"
$subject = "VMWare snapshots report for week of $date"
$smtp = "h"

Send-MailMessage -from $from -to $to -subject $subject -Body $Report -BodyAsHtml -smtpServer $smtp

Write-Host "`n e-mail will arrive shortly, process complete!"

the one that successfully adds it as an attachment with correct formatting looks like this. but i don't prefer this way.

# make the "creds" file first and drop it into a directory.

Write-Host "`n Starting script, connecting to server" -ForegroundColor Green

$creds = Get-VICredentialStoreItem -file "D:\creds"
connect-viserver -server $creds.Host -User $creds.User -Password $creds.Password
Start-Sleep -s 30

Write-Host "`n Connection to server complete" -ForegroundColor Green
Write-Host "`n Pulling data from Win03vc02" -ForegroundColor Green

$date = Get-Date
$dateforname = Get-Date -UFormat '%m-%d-%Y-%H%M%S'
$filename = "VMsnapshots_" + $dateforname + ".html"

$Attachment = "D:\$filename"

$css = "D:\htmlstyle2.css"

$Report = Get-VM | Get-Snapshot | Select-Object VM,VMId,Description,PowerState,SizeGB | ConvertTo-Html -CssUri $css | Out-File -Encoding ascii "$Attachment"

Write-Host "`n Data pulled, sending mail in 60 seconds..." -ForegroundColor green

Start-Sleep -s 30

$from = "t"
$to = "a"
$subject = "VMWare snapshots report for week of $date"
$smtp = "a"

Send-MailMessage -from $from -to $to -subject $subject -body "Hello, attached is the snapshot report for this week on $date. `nPlease download it first, then open it. `
Timestamp follows the format month-day-year_hours-minutes-seconds" -Attachments "$Attachment"  -smtpServer $smtp

Write-Host "`n e-mail will arrive shortly, process complete!"
1
  • I figured out how to do this sort of - at least getting the style to show up as an attachment, successfully. IF you need help just ping me. Mar 23, 2015 at 19:58

1 Answer 1

2

Gmail strips out the style tags. You will need to put your style inline. It will probably be easiest to perform string manipulation on $Report. For example:

$newhtml = $Report -replace ('<td','<td style="color:red;"')
2
  • hmm ahh okay, I will try my best and let you know if I'm successful.. Mar 9, 2015 at 16:27
  • I'm still stuck! Also, I noticed that the script that I thought works (the 2nd one), actually doesn't work on someone else's computer - they don't get the nice styling. Is it because it is not inline? I have tried to find many online tutorials for inline CSS, but still stuck... Mar 12, 2015 at 14:43

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .