至少我认为我已经掌握了一切。我想给自己发送一个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或为空。”
任何方向,建议或示例都将不胜感激。 感谢
答案 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-String
或Get-Help Out-Default
以寻找可能的替代方案。
在绕过Write-Host
的管道时,将作业保留为$body
“空” - 也就是说,没有数据要分配给变量。由于$null
是变量的合法值,因此在不允许空值的上下文中使用变量(例如使用Send-MailMessage
)时,这不会引发错误。 / p>