2017-05-30 6 views
0

私はオフラインワークステーションのリストをpingするスクリプトを持っています。次に、ワークステーションIDと説明の両方を取り、それを電子メールの本文に入れて特定のアドレスに送信します。PowerShellのSystem.Object []を固定します。

私は変数を出力する限り、スクリプトはPowerShellの中でうまく動作します。 Send-MailMessageコマンドレットを使用すると、電子メールの本文に表示されるのは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としてメールを送っているので、ワークステーションIDと説明の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'コマンドレットを使ってISEに' $ body'変数を表示しただけでは、HTMLと変位を生成していることがわかりますカスタムオブジェクトを正しく理解する。 'System.Object []'を文字列に変換するにはどうすればよいですか? – Ozar

+0

ああ、そうです。 'ConvertTo-Html'はまだ配列を生成します。 'Out-String'も必要です。更新された回答をご覧ください。 –

+0

あなたは私に大きな頭痛を救ってくれました。私は結果を '.csv 'にエクスポートして添付ファイルとして送信することに対処しなければならないと考え始めました。私はPSにかなり新しいですし、カスタムオブジェクトは私にとって外国のコンセプトでした。もっと頻繁に使う必要があるようです。 – Ozar

関連する問題