获取wmiobject win32:如何通过电子邮件发送输出

时间:2017-05-09 15:00:55

标签: powershell email office365 get-wmiobject

至少我认为我已经掌握了一切。我想给自己发送一个Get-WmiObject win32命令的输出。例如:

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

 $secpasswd = ConvertTo-SecureString "mypassword" -AsPlainText -Force
    $mycreds = New-Object System.Management.Automation.PSCredential 
("support@myemail.com", $secpasswd)

    Send-MailMessage -To "support@myemail.com" -SmtpServer 
"smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" -
Body $body -From "support@myemail.com"

我尝试了以下内容:

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

返回错误:“无法验证参数'Body'的参数。参数为null或为空。”

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

2 个答案:

答案 0 :(得分:2)

此格式为您提供更丰富的信息。这会获取Win32_OperatingSystem类的内容并将其转换为HTML表格,并将其附加到$body变量,并在其上方显示“计算机信息:”文字:

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

通过将$body管道传输到Out-String来有效地重新创建-Body。这可以确保它是一个字符串对象,Send-MailMessage $Body = $Body | Out-String 参数需要:

Send-MailMessage

最后,在致电Send-MailMessage -To "support@myemail.com" -From "support@myemail.com" -SmtpServer "smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" -Body $body -BodyAsHTML 时,请使用-BodyAsHTML参数确保将电子邮件作为HTML电子邮件发送:

field_a

答案 1 :(得分:1)

Write-Host绕过通常的PowerShell数据路由(管道);您可能需要查看Get-Help Out-StringGet-Help Out-Default以寻找可能的替代方案。

在绕过Write-Host的管道时,将作业保留为$body“空” - 也就是说,没有数据要分配给变量。由于$null是变量的合法值,因此在不允许空值的上下文中使用变量(例如使用Send-MailMessage)时,这不会引发错误。 / p>