得到wmiobject的win32:我如何通过电子邮件的输出

得到wmiobject的win32:我如何通过电子邮件的输出

问题描述:

我有一切就位,至少我认为是这样。我想给自己发送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或空。”

任何方向,建议或例子,将不胜感激。 谢谢

Write-Host绕过通常的PowerShell数据路由(管道);你可能想看看Get-Help Out-StringGet-Help Out-Default寻找可能的选择。

在使用Write-Host绕过流水线时,您将作业保留为“空” - 即没有要分配给变量的数据。由于$null是一个变量的合法值,因此在变量用于不允许空值的上下文中(例如Send-MailMessage)之前,这不会引发错误。

+0

谢谢每个人的帮助! – Wchristner

此格式为您提供更丰富的信息。这需要在Win32_OperatingSystem类的内容,并将其转换成HTML表格,将其追加到$body变量,用你的“计算机信息:”文字上面:

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

通过其管道到Out-String有效地再现$body。这将确保它是一个字符串对象,其中Send-MailMessage-Body参数要求:

$Body = $Body | Out-String 

最后,调用Send-MailMessage使用-BodyAsHTML参数,以确保邮件在发送的HTML电子邮件:

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