2017-05-09 13 views
0

少なくとも私はそう考えています。私はGet-WmiObject win32コマンドの出力を電子メールで送っていきたいと思います。例:wmiobject win32を入手する:出力を電子メールで送信するには

$OS = "." 
(Get-WmiObject Win32_OperatingSystem).Name |Out-String 

$secpasswd = ConvertTo-SecureString "mypassword" -AsPlainText -Force 
    $mycreds = New-Object System.Management.Automation.PSCredential 
("[email protected]", $secpasswd) 

    Send-MailMessage -To "[email protected]" -SmtpServer 
"smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" - 
Body $body -From "[email protected]" 

私は次のことを試してみました:

$body = (
    Write-Host "Computer Info:" -Message $PCinfo 
) -join "`r`n" 
    Write-Verbose -Message $body 

エラーを返すこと:「パラメータ 『ボディ』に引数を検証することはできませんが、引数がnullまたは空です。」

どのような指示、アドバイス、例があれば幸いです。 ありがとう

答えて

1

Write-Hostは、通常のPowerShellデータルート(パイプライン)をバイパスします。可能な選択肢はGet-Help Out-StringまたはGet-Help Out-Defaultです。

Write-Hostでパイプラインをバイパスすると、割り当ては$bodyになります。つまり、変数に割り当てるデータはありません。 $nullは変数が持つ正当な値なので、null値が許可されていないコンテキスト(たとえばSend-MailMessage)で変数が使用されるまで、エラーは発生しません。

+0

おかげでこれはSend-MailMessage-Bodyパラメータが必要となる文字列オブジェクトだ保証しますみんな助けて! – Wchristner

2

このフォーマットは、より豊かな情報を提供します。これは、あなたと、Win32_OperatingSystemクラスの内容を受け取り、HTMLテーブルに変換し、$bodyそれを変数に追加「コンピュータ情報:」それより上のテキスト:

$body = "Computer Info: <br>" 
$body += Get-WmiObject -Class Win32_OperatingSystem | ConvertTo-HTML -Fragment 

効果的Out-Stringに配管により$bodyを再作成します。

$Body = $Body | Out-String 

を最後に、HTML形式の電子メールとして送信されSend-MailMessage電子メールを確実にするために-BodyAsHTMLパラメータを使用を呼び出すとき:

Send-MailMessage -To "[email protected]" -From "[email protected]" -SmtpServer "smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" -Body $body -BodyAsHTML 
関連する問題