none
PowerShellのGet-Eventlogでエラー RRS feed

  • 質問

  • OS:Windows Server 2008 R2 EE

    PowerShellのGet-Eventlogコマンドにて、イベントログ(セキュリティ)を抽出する際、稀に下記エラーとなります。

    【コマンド】

    get-eventlog -Logname security |where {$_.TimeGenerated -like 'MM/DD/YYYY*'}|select-object EntryType,EventID,TimeGenerated,Source,MachineName,CategoryNumber,UserName,Data,Index,Category,ReplacementStrings,Instanced,TimeWritten,Site,Container,Message |export-csv -noTypeInformation -encoding default -path [path]\[file]

    【エラー】

    Get-EventLog : 次のエラーのため、ログ"security"の読み取りを完了できませんでした。読み取り中にログが削除された可能性があります。インデックス1646837が境界を超えています。発生場所 行:1 文字:2

    【質問】

    エラーの後、少し待って単純再実行すると成功します。

    上記エラーを防ぐ方法はありますでしょうか?

    仕方ない場合(ログ削除されている間は抽出できない)は、諦めて再実行にて回避するよう考えております。

    お手数ですが、ご教示頂けますよう、お願いいたします。


    2012年3月23日 9:45

回答

  • PowerShellでコマンドをパイプラインで接続すると全体が一つのコマンドとして機能するので、末端のコマンドが完全に終了するまで先頭のコマンドの実行も継続します。

    したがって今回のケースではGet-EventLogは後続コマンドレットの動作速度に影響され(特にファイル出力部分がボトルネック?)、通常より実行時間が長くかかり、結果として実行中に古いイベントログが削除されてしまいそのイベントログのプロパティを読み込めなくなっている可能性があります。

    これを回避するには一旦イベントログの配列を変数に受け、その変数に対して各種操作を行うと良いかと思います。

    $logs=get-eventlog -Logname security |where {$_.TimeGenerated -like 'MM/DD/YYYY*'}
    $logs|select-object EntryType,EventID,TimeGenerated,Source,MachineName,CategoryNumber,UserName,Data,Index,Category,ReplacementStrings,Instanced,TimeWritten,Site,Container,Message |export-csv -noTypeInformation -encoding default -path [path]\[file]

    のようになるでしょうか。

    想像をまじえて書いているのでもしかしてはずしているかもしれませんが、一度お試しください。

    • 回答の候補に設定 星 睦美 2012年3月28日 2:21
    • 回答としてマーク 星 睦美 2012年3月28日 8:03
    2012年3月25日 2:47
    モデレータ

すべての返信

  • PowerShellでコマンドをパイプラインで接続すると全体が一つのコマンドとして機能するので、末端のコマンドが完全に終了するまで先頭のコマンドの実行も継続します。

    したがって今回のケースではGet-EventLogは後続コマンドレットの動作速度に影響され(特にファイル出力部分がボトルネック?)、通常より実行時間が長くかかり、結果として実行中に古いイベントログが削除されてしまいそのイベントログのプロパティを読み込めなくなっている可能性があります。

    これを回避するには一旦イベントログの配列を変数に受け、その変数に対して各種操作を行うと良いかと思います。

    $logs=get-eventlog -Logname security |where {$_.TimeGenerated -like 'MM/DD/YYYY*'}
    $logs|select-object EntryType,EventID,TimeGenerated,Source,MachineName,CategoryNumber,UserName,Data,Index,Category,ReplacementStrings,Instanced,TimeWritten,Site,Container,Message |export-csv -noTypeInformation -encoding default -path [path]\[file]

    のようになるでしょうか。

    想像をまじえて書いているのでもしかしてはずしているかもしれませんが、一度お試しください。

    • 回答の候補に設定 星 睦美 2012年3月28日 2:21
    • 回答としてマーク 星 睦美 2012年3月28日 8:03
    2012年3月25日 2:47
    モデレータ
  • 牟田様

    ご返信ありがとうございます。

    ご指摘頂きました内容が起因していると、確かに想像できますので、試してみます。

    ただ、再現を試みても再現せず、且つ、原因特定(≒ボトルネック特定)が難しいため、

    併せて、リトライ処理を入れての対応を考えております。

    ご返信いただきまして、誠にありがとうございました。

    2012年3月28日 5:25