Powershell v2.0 has a cmdlet that allows you to send an email
NAME
Send-MailMessage
SYNOPSIS
Sends an e-mail message.
SYNTAX
Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[
]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFa
ilure | Delay | Never}] [-Encoding <Encoding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]
DESCRIPTION
The Send-MailMessage cmdlet sends an e-mail message from within Windows PowerShell.
RELATED LINKS
Online version: http://go.microsoft.com/fwlink/?LinkID=135256
REMARKS
To see the examples, type: "get-help Send-MailMessage -examples".
For more information, type: "get-help Send-MailMessage -detailed".
For technical information, type: "get-help Send-MailMessage -full".
Ok so today I has a collection that I had stored in a variable
[12:39:03] ~> $myvar | gm TypeName: Selected.System.Management.Automation.PSCustomObject
And when I tried this:
[12:40:18] ~> Send-MailMessage –From "maishsk@maishsk.local" -To "maishsk@maishsk.local" -Subject "test" -SmtpServer smtp.maishsk.local -Body ($myvar)
I was presented with this:
Send-MailMessage : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Body'. Specified method is not supported.
At line:1 char:114
+ Send-MailMessage –From “maishsk@maishsk.local” –To “maishsk@maishsk.local” -Subject "test" -SmtpServer smtp.maishsk.local -Body <<<< ($myvar)
+ CategoryInfo : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage
Thanks to my trusted friend Shay Levy (who always has the time to help out and is never tired of my questions - “I hope…” ) he explained to me why this was happening.
The object that is expected in the Body parameter is a TypeName: System.String object. I also could have seen that if I had looked properly in the help of the cmdllet -- [[-Body] <string>] --
So the solution was very simple. Out-String
[12:49:11] ~> $myvar | Out-String | gm TypeName: System.String
And with that it was not a problem to send the mail
[12:50:18] ~> Send-MailMessage –From "maishsk@maishsk.local" -To "maishsk@maishsk.local" -Subject "test" -SmtpServer smtp.maishsk.local -Body ( $myvar | out-string )
Is it not wonderful that you learn something new every day!
Back to work….
Small Edit:
<------ RANT -------->
Just clarify this is not a Powershell problem – it does exactly what it is supposed to.
Tthe annoying part is that it takes a while to figure out the problem is.
<------ END RANT----->