0

ログ ファイルには次の内容が含まれます。

=====
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行ずつ行うため、アプローチ方法にこだわっています。

4

3 に答える 3