获取 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
即returns错误:"Cannot validate argument on parameter 'Body'. The argument is null or empty."
如有任何指导、建议或示例,我们将不胜感激。
谢谢
Write-Host
绕过通常的 PowerShell 数据路由(管道);您可能需要查看 Get-Help Out-String
or Get-Help Out-Default
以寻找可能的替代方案。
在使用 Write-Host
绕过管道时,您将分配留给 $body
"empty" - 也就是说,没有数据分配给变量。由于 $null
是变量的合法值,因此不会抛出错误,直到在不允许空值的上下文中使用该变量(例如 Send-MailMessage
)。
这种格式给你一些更丰富的信息。这将获取 Win32_OperatingSystem
class 的内容并将其转换为 HTML table,将其附加到 $body
变量,并使用 "Computer Info:"上面的文字:
$body = "Computer Info: <br>"
$body += Get-WmiObject -Class Win32_OperatingSystem | ConvertTo-HTML -Fragment
通过将 $body
传输到 Out-String
,有效地重新创建 $body
。这确保它是一个字符串对象,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
我已经准备好了一切,至少我是这么认为的。我想通过电子邮件将 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
即returns错误:"Cannot validate argument on parameter 'Body'. The argument is null or empty."
如有任何指导、建议或示例,我们将不胜感激。 谢谢
Write-Host
绕过通常的 PowerShell 数据路由(管道);您可能需要查看 Get-Help Out-String
or Get-Help Out-Default
以寻找可能的替代方案。
在使用 Write-Host
绕过管道时,您将分配留给 $body
"empty" - 也就是说,没有数据分配给变量。由于 $null
是变量的合法值,因此不会抛出错误,直到在不允许空值的上下文中使用该变量(例如 Send-MailMessage
)。
这种格式给你一些更丰富的信息。这将获取 Win32_OperatingSystem
class 的内容并将其转换为 HTML table,将其附加到 $body
变量,并使用 "Computer Info:"上面的文字:
$body = "Computer Info: <br>"
$body += Get-WmiObject -Class Win32_OperatingSystem | ConvertTo-HTML -Fragment
通过将 $body
传输到 Out-String
,有效地重新创建 $body
。这确保它是一个字符串对象,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