繁体   English   中英

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

[英]get wmiobject win32: how do I email the output

至少我认为一切都准备就绪。 我想通过电子邮件将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或为空。”

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

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

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

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

$Body = $Body | Out-String

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

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

Write-Host绕过常规的PowerShell数据路由(管道); 您可能希望查看Get-Help Out-StringGet-Help Out-Default以获取可能的替代方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM