получить wmiobject win32: как мне отправить результат по электронной почте

У меня все на месте, по крайней мере я так думаю. Я хочу отправить себе по электронной почте вывод команды Get-WmiObject win32. пример:

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

 $secpasswd = ConvertTo-SecureString "mypassword" -AsPlainText -Force
    $mycreds = New-Object System.Management.Automation.PSCredential 
("[email protected]", $secpasswd)

    Send-MailMessage -To "[email protected]" -SmtpServer 
"smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" -
Body $body -From "[email protected]"

Я пробовал следующее:

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

Это возвращает ошибку: «Невозможно проверить аргумент параметра «Тело». Аргумент имеет значение null или пуст».

Буду признателен за любое направление, совет или примеры. Спасибо


person Wchristner    schedule 09.05.2017    source источник


Ответы (2)


Write-Host обходит обычный маршрут передачи данных PowerShell (конвейер); вы можете изучить Get-Help Out-String< /a> или Get-Help Out-Default возможные варианты.

При обходе конвейера с помощью Write-Host вы оставляете присвоение $body «пустым», то есть нет данных для присвоения переменной. Поскольку $null является допустимым значением для переменной, это не приведет к ошибке, пока переменная не будет использоваться в контексте, где нулевое значение не разрешено (например, с Send-MailMessage).

person Jeff Zeitlin    schedule 09.05.2017
comment
Спасибо всем за помощь! - person Wchristner; 09.05.2017

Этот формат дает вам более богатую информацию. Это берет содержимое класса 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 используйте параметр -BodyAsHTML, чтобы электронное письмо было отправлено в формате HTML:

Send-MailMessage -To "[email protected]" -From "[email protected]" -SmtpServer "smtp.office365.com" -Credential $mycreds -UseSsl "Backup Notification" -Body $body -BodyAsHTML
person Robin    schedule 09.05.2017