0
我有一個腳本,它將ping一個脫機工作站的列表,然後如果工作站脫機查詢SCCM的描述。然後,它將工作站ID和描述都放在一個電子郵件正文中,並將其發送到特定地址。修復PowerShell中的System.Object []
只要我只輸出變量,這個腳本在PowerShell裏面工作的很好。如果我使用Send-MailMessage
cmdlet,則電子郵件正文中顯示的唯一內容是System.Object[]
。
我該如何解決這個問題?我已閱讀關於-join
屬性的內容,但我不太確定將其添加到腳本的位置。
$list = Get-Content "C:\Users\$env:UserName\Desktop\workstations.txt"
foreach ($workstation in $list) {
$test = Test-Connection -BufferSize 32 -Count 1 -ComputerName $workstation -Quiet
$WQLquery = @"
select SMS_G_System_OPERATING_SYSTEM.Description from
SMS_R_System inner join SMS_G_System_SYSTEM on
SMS_G_System_SYSTEM.ResourceID = SMS_R_System.ResourceId inner join
SMS_G_System_OPERATING_SYSTEM on
SMS_G_System_OPERATING_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM.Name = '$workstation'
"@
$description = Get-WmiObject -Query $WQLquery -ComputerName 'WORKSTATIONHERE' -Namespace 'root\sms\SITEHERE' |
Select-Object Description
if ($test -match "false") {
$offlinelist += ,@("$workstation", $description)
}
}
$offlinelist
Send-MailMessage -To "TOTHEUSER" -From "FROM" -Subject "Offline Workstations" -SmtpServer "SMTPHERE" -Body "<p>These workstations are offline: </p> $offlinelist" -BodyAsHtml
這看起來比我的代碼好多了。當我運行這將返回一個錯誤: '發送-MAILMESSAGE:無法將「System.Object的[]」到指定的 「System.String」要求的參數類型「體」方法不supported.' 然而,如果我只是使用'write-host' cmdlet在ISE中顯示'$ body'變量,則表明它正在生成HTML和顯示正確對準自定義對象。我如何得到這個將'System.Object []'轉換爲字符串? – Ozar
啊,是的。 'ConvertTo-Html'仍然會產生一個數組。你也需要一個'Out-String'。查看更新的答案。 –
你先生,救了我一個巨大的頭痛。我開始認爲我必須處理將結果導出爲'.csv並將其作爲附件發送。我對PS相當陌生,自定義對象對我來說是一個外國概念。看起來我需要更頻繁地開始使用它們! – Ozar