【问题标题】:get wmiobject win32: how do I email the output获取 wmiobject win32:如何通过电子邮件发送输出
【发布时间】:2017-05-09 15:00:55
【问题描述】:

至少我是这么认为的。我想通过电子邮件向自己发送 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'上的参数。参数为空或空。”

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

【问题讨论】:

    标签: powershell email office365 get-wmiobject


    【解决方案1】:

    这种格式为您提供了一些更丰富的信息。这将获取 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢大家的帮助!
      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2018-11-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多