トップ回答者
PowerShellのGet-Eventlogでエラー

質問
-
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
【質問】
エラーの後、少し待って単純再実行すると成功します。
上記エラーを防ぐ方法はありますでしょうか?
仕方ない場合(ログ削除されている間は抽出できない)は、諦めて再実行にて回避するよう考えております。
お手数ですが、ご教示頂けますよう、お願いいたします。
回答
-
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]のようになるでしょうか。
想像をまじえて書いているのでもしかしてはずしているかもしれませんが、一度お試しください。
すべての返信
-
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]のようになるでしょうか。
想像をまじえて書いているのでもしかしてはずしているかもしれませんが、一度お試しください。