Geek
         vSphere環境にある、Horizon Viewの仮想マシンをPowerCLIで操作する。
今回はWindows Updateを自動で適用させることをPowerShellで実行しつつ、その内容をメール送付する。

なんだかんだでなかなかViewの操作に入らないが、脱線して、
前回のWindowsUpdateの結果をメールで受信するまでにハマったので、こちらもメモ。


基本方針は、 スクリプト本体には可能な限り手を加えない。
ということで、まずはスクリプトのアウトプットを別ファイルに出力する。


そのために必要な変更は、以下の通り

 
 
まず、出力先をコンソールではなく、
ファイルへと出力するように変更する。
その後、メールでの送信時に、ファイルの中身を「メール本文に」して
送信するようにスクリプトを変更する。
愚弟的には、

Write-Host 文字列 → Write-Output 文字列 |Out-file -append -Encoding UTF8 ${出力先}   


Write-Host コンソールへのアウトプット
Write-Output パイプラインへのアウトプット
Out-File ファイルへの出力
-Append 追記
-Encoding 文字エンコード(メール用途にUTF8)

で、最終的に、メールを送信するコマンドレット、

Send-Mailmessage メール送信コマンドレット
-To 送信先
-Body メール本文
-Subject 件名
-SmtpServer smtpサーバ
-From 送信元メールアドレス
-BodyAsHTML 本文をHTMLとして表示するプロパティ(単独)
-Encoding 文字エンコード(メール用途にUTF8が良い)

を利用すれば良いのだが、この時、単純に

-Body ${Write-Outputの出力先} とすると、Send-Mailmessageコマンドレットがエラーとなる。

結構悩んだのだが、原因と結論を簡単に記載すると、

  • Write-Outputで出力した内容がオブジェクト扱いとなっている
  • これらを回避するために、ファイルの中身を文字列として取得する
  • この時、Get-Contentで中身を単純取得すると、行毎の配列となる

ということに気がつくまでにしばらくかかった。 というわけで

$Body = (Get-Content -Encoding UTF8 ${出力先} |out-string)

としてファイルの中身を一つの文字列として扱うことでメール本文にWindowsUpdateの内容を記載するようにした。

スポンサーサイト

関連キーワード(ユーザータグ):
VMware
PowerCLI
仮想化

トラックバック用URL ;http://gatolynx.blog100.fc2.com/tb.php/335-8b206638

コメントの投稿

非公開コメント