Solved

Send email with powershell

Posted on 2013-12-05
17
397 Views
Last Modified: 2013-12-12
I have the following commands that work separately, but I want to results from the first command be sent as email by the second command.

how can I do that?

1***
gwmi win32_volume -Filter 'drivetype = 3' |select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} }

2****
Send-MailMessage -From sender@domain.com -To Receiver@domain.com-Subject 'Daily Freespace Report' `-SmtpServer smtpservername


Thanks
0
Comment
Question by:jskfan
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 6
  • 4
17 Comments
 
LVL 70

Expert Comment

by:Qlemo
ID: 39699975
Sorry, I thought piping the results into Send-MailMessage would work, but it doesn't.
We'll need to create a text file, and send that as attachment:
$file = $env:Temp\DiskReport.txt
gwmi win32_volume -Filter 'drivetype = 3' |
  select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} } |
  ft -auto | Out-File $file

Send-MailMessage -From sender@domain.com -To Receiver@domain.com-Subject 'Daily Freespace Report' `-SmtpServer smtpservername -Attachment $file
Remove-Item $file

Open in new window

0
 
LVL 40

Assisted Solution

by:footech
footech earned 250 total points
ID: 39701427
Or even without the intermediate file.
$body = gwmi win32_volume -Filter 'drivetype = 3' |
  select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} } |
  ft -auto
Send-MailMessage -From sender@domain.com -To Receiver@domain.com -Subject 'Daily Freespace Report' -SmtpServer smtpservername -Body ($body | out-string)

Open in new window

0
 

Author Comment

by:jskfan
ID: 39701616
let 's start one command at a time:

This does not give any error nor output
$body = gwmi win32_volume -Filter 'drivetype = 3' |select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} }| ft -auto


This will give output, but not converted to Gigabytes:
gwmi win32_volume -Filter 'drivetype = 3' |select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} }
0
Ready to trade in that old firewall?

Whether you need to trade-up to a shiny new Firebox or just ready to upgrade from whatever appliance you're using now, WatchGuard has the right appliance for you! Find your perfect Firebox today with appliance sizing tool!

 
LVL 40

Expert Comment

by:footech
ID: 39701651
It shouldn't output anything to the console as it is stored in the $body variable.
Here's a sample of what the command produces on my computer.
driveletter label    GBfreespace
----------- -----    -----------
            RECOVERY 1.83       
C:          OS       13.42      

Open in new window

0
 
LVL 70

Expert Comment

by:Qlemo
ID: 39701661
To see the result, you will have to e.g. just write the var alone:
$body

Open in new window

The command without $body is the same as you used it, and it does return fractional GBs for sure.
0
 

Author Comment

by:jskfan
ID: 39701762
this works now
gwmi win32_volume -Filter 'drivetype = 3' |select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} }
0
 

Author Comment

by:jskfan
ID: 39701775
if I copy paste this command to windows powershell and change the send and receiver email and the smtp server

$body = gwmi win32_volume -Filter 'drivetype = 3' |
  select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} } |
  ft -auto
Send-MailMessage -From sender@domain.com -To Receiver@domain.com -Subject 'Daily Freespace Report' -SmtpServer smtpservername -Body ($body | out-string)

it does not give error , but it does not send me email.
0
 
LVL 40

Expert Comment

by:footech
ID: 39701916
When you run the command
Send-MailMessage -From sender@domain.com -To Receiver@domain.com -Subject 'Daily Freespace Report' -SmtpServer smtpservername -Body "testing"

Open in new window

do you get anything?  If not then you need to either adjust the email server config, or possibly adjust the command to work with it's settings.

What are you using for email?  Is it set to allow you to submit email on port 25?  Do you need to provide credentials?
0
 
LVL 40

Expert Comment

by:footech
ID: 39701945
Actually, I expect any issue contacting the SMTP server would generate an error, but I can't be certain.
0
 

Author Comment

by:jskfan
ID: 39702261
yes it sends with this:

Send-MailMessage -From sender@domain.com -To Receiver@domain.com -Subject 'Daily Freespace Report' -SmtpServer smtpservername -Body "testing"
0
 
LVL 40

Expert Comment

by:footech
ID: 39702334
Well, no reason that it shouldn't work with the other then.  If you didn't get an error and didn't receive the email then I would guess it was filtered out by something in your email system or it was sent to a wrong or invalid email address.
0
 

Author Comment

by:jskfan
ID: 39702582
$body = gwmi win32_volume -computername remotecomputername -Filter 'drivetype = 3' |select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} } |  fl
Send-MailMessage -From me@domain.com.com -To me@shopzilla.com -Subject 'Daily Freespace Report' -SmtpServer smtp.domain.com -Body ($body | out-string)

This is worked ...

======== if you do not mind Guys, I need to  put this in a file and schedule it in the task scheduler.... for now I am just pasting the command into windows powershell and run it...I saved the command into ps1 file but when I run it, it does not do anything other than opening up the ps1 file.
also if you want to add icing on the cake, please change the command so that the email will display the out in form of a table, with output under each header well spaced...

Thank you
0
 

Author Comment

by:jskfan
ID: 39702583
OOps.. just right-clicked on the file and "Run with Powershell" it sent me email...
so it works, but when I schedule it, how am I going to tell it run with Powershell ?
0
 
LVL 40

Expert Comment

by:footech
ID: 39702597
In your last WMI query you piped to "fl" (Format-List).  All other versions piped to "ft" (Format-Table).
Your scheduled task will start powershell.exe, and the argument can be "-file yourscript.ps1".
0
 
LVL 70

Expert Comment

by:Qlemo
ID: 39703143
The default action for .ps1 files is Open, which means "Open in an editor", not execute. This is to make it more difficult to run malicious (or unknown) code accidentally.

Hence you have to start PowerShell.exe and provide the script as an argument, as told by footech.
0
 
LVL 70

Accepted Solution

by:
Qlemo earned 250 total points
ID: 39703204
As said by me earlier, a HTML table might be better suited for your needs:
$body = gwmi win32_volume -Filter 'drivetype = 3' |
  select driveletter, label, @{LABEL='GBfreespace';EXPRESSION={"{0:N2}" -f ($_.freespace/1GB)} } |
  ConvertTo-Html
Send-MailMessage -From me@domain.com.com -To me@shopzilla.com -Subject 'Daily Freespace Report' -SmtpServer smtp.domain.com -Body (-join $body) -BodyAsHTML

Open in new window

0
 

Author Closing Comment

by:jskfan
ID: 39715640
Excellent!
Thank you Guys
0

Featured Post

Office 365 Training for Admins - 7 Day Trial

Learn how to provision tenants, synchronize on-premise Active Directory, implement Single Sign-On, customize Office deployment, and protect your organization with eDiscovery and DLP policies.  Only from Platform Scholar.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There are times when we need to generate a report on the inbox rules, where users have set up forwarding externally in their mailbox. In this article, I will be sharing a script I wrote to generate the report in CSV format.
In this article I discuss my selections of the Top Four free Outlook OST File Viewers available. Open, view and read even damaged OST files by using these tools. They all provide a clear preview of all data such as emails, notes, tasks, calendars, e…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…
Suggested Courses

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question