イベントログの出力を処理しやすい形式で出力
簡易には、これまで示したGet-WinEventコマンドの出力をSelect-Objectなどで必要なプロパティのみを取り出して出力するのでもいいのだが、中身が配列になっているPorpertiesの扱いがちょっと面倒だ。このため、Foreach-Objectを使って、
ForEach-Object {"{0}`t{1}`t{2}`t{3}" -F ($_.TimeCreated.ToString($myTfmt)),($_.RecordID),($myres[$_.id]),(対象により指定が違う部分) } `
といった形式で、タブ区切りの文字列出力を作ることにした。タブ区切りとしたのは、ExcelのCSVがフィールドの切れ目を誤解することがあるからだ。
ForEach-Objectは、パイプラインの前から来るオブジェクトの配列の各要素に対して{ }内のスクリプトを適用するものだ。Select-Objectでは、やってくるオブジェクトのプロパティしか指定できないので、Propertiesプロパティの中に入っている配列オブジェクトの一部を取り出すことができない。
しかし、ForEach-Objectの{ }内には、任意のスクリプトを記述できるため、プロパティの中のオブジェクトの一部を取り出すこともできる。また「"{0}`t{1}`t{2}`t{3}" -F ... 」という部分は、先頭のフォーマット指定文字列に対して、-F以降の計算式を当てはめて文字列として出力するもの。C言語でいうprintfと似たような機能で、{}で囲まれた部分が書式指定文字にあたる。「`t」はタブ文字を表すため、この部分では、後ろの計算式の結果をタブ区切りの文字列として出力できる。
ただし、イベントにより、最後の計算式は違いが出る。メッセージに埋め込む文字列は、イベントごとに違うからだ。このあたりをまとめたのが、以下の表である。
なお、PowerShellの配列の添え字は0から始まるが、イベントログのXML表現では、最初の要素が1になっているので差に注意が必要である。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











