2017-05-30 29 views
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 

回答

0

如果你建立(自定義)對象的數組,把變量與字符串數組,PowerShell的將其擴展爲一個對象數組,這是System.Object[]的字符串表示。

你真的想有什麼工作站標識和描述的HTML表(因爲你發送郵件的HTML反正。

$offlinelist = foreach ($workstation in $list) { 
    ... 
    if ($test -match "false") { 
     New-Object -Type PSObject -Property ([ordered]@{ 
      ID   = $workstation 
      Description = $description 
     }) 
    } 
} 

$body = $offlinelist | 
     ConvertTo-Html -Fragment -PreContent '<p>These workstations are offline:</p>' | 
     Out-String 
Send-MailMessage ... -Body $body -BodyAsHtml 
+0

這看起來比我的代碼好多了。當我運行這將返回一個錯誤: '發送-MAILMESSAGE:無法將「System.Object的[]」到指定的 「System.String」要求的參數類型「體」方法不supported.' 然而,如果我只是使用'write-host' cmdlet在ISE中顯示'$ body'變量,則表明它正在生成HTML和顯示正確對準自定義對象。我如何得到這個將'System.Object []'轉換爲字符串? – Ozar

+0

啊,是的。 'ConvertTo-Html'仍然會產生一個數組。你也需要一個'Out-String'。查看更新的答案。 –

+0

你先生,救了我一個巨大的頭痛。我開始認爲我必須處理將結果導出爲'.csv並將其作爲附件發送。我對PS相當陌生,自定義對象對我來說是一個外國概念。看起來我需要更頻繁地開始使用它們! – Ozar

相關問題