ログ ファイルには次の内容が含まれます。
===== SMTP_server_not_set_up @PANEL SMTP サーバーが設定されていません。システム管理者に連絡してください。 @PAGECNT 381 @SCANADFCNT 0 @DATETIME 2019-08-29T10:05:51-0400 @アップタイム 0:00:23 @CODELVL ベース MSNGM.053.023 エンジン GM.052.E015 パネル f0.12p48v3 @終わり ===== パワーオンリセット @PAGECNT 381 @SCANADFCNT 0 @DATETIME 2019-08-29T10:05:50-0400 @PORCNT 49 @CODELVL ベース MSNGM.053.023 エンジン GM.052.E015 パネル f0.12p48v3 @終わり ===== Load_MP_Feeder_with_Custom_Type_5_Letter @PANEL カスタム タイプ 5 文字の MP フィーダーをロード @PAGECNT 337 @SCANADFCNT 0 @DATETIME 2019-08-29T09:59:22-0400 @アップタイム 0:44:15 @CODELVL ベース MSNGM.053.023 エンジン GM.052.E015 パネル f0.12p48v3 @終わり =====
...さらに多くの行
「=====」の行に続く 6 行を取得して、それをカスタム オブジェクトに変換したいと考えています。
たとえば、最初の行に基づいて、理想的なオブジェクトは次のようになります。
メッセージ: SMTP_server_not_set_up PANEL : @PANEL SMTP サーバーが設定されていません。システム管理者に連絡してください。 PAGECNT: @PAGECNT 381 SCANADFCNT :@SCANADFCNT 0 DATETIME : @DATETIME 2019-08-29T10:05:51-0400 稼働時間: @稼働時間 0:00:23
これまでのところ、繰り返し発生する「=====」に続く 6 行を次のように分離できます。
(Select-String -Path "$PSScriptRoot\$($printer)_history.log" -Pattern "=====" -Context 6).Context.PostContext
次に、これらの行をカスタム オブジェクトに配置する必要があります。これに正しくアプローチする方法が正確にはわかりません。次のようなことを検討しています。
$ObjHistory = @()
(Select-String -Path "$PSScriptRoot\$($printer)_history.log" -Pattern "=====" -Context 6).Context.PostContext | ForEach-Object {
if ($_ -match "PANEL") {
$properties = [ordered]@{'PANEL'="$_"}
$objet = New-Object -TypeName PSObject -Property $properties
}
$ObjHistory += $objet
}
$ObjHistory
このようにして、そのPANELプロパティをカスタムオブジェクトに正常に配置できることがわかりました。出力は次のとおりです。
パネル ----- @PANEL SMTP サーバーが設定されていません。システム管理者に連絡してください。 @PANEL カスタム タイプ 5 文字の MP フィーダーをロード @PANEL カスタム タイプ 5 文字の MP フィーダーをロード @PANEL カスタム タイプ 5 文字の MP フィーダーをロード @PANEL カスタム タイプ 5 文字の MP フィーダーをロード
ただし、他の行についてはそれを行う必要があり、ForEach-Object
一度に1行ずつ行うため、アプローチ方法にこだわっています。