3

PowerShellでイベントログをリモートでフェッチするスクリプトを作成しましたが、スクリプトが独自のイベントログエントリを作成する方法が好きではありません。

具体的には、このスクリプトは、ログオン/ログオフイベントを含むいくつかのタイプのイベントIDを取得します。最近、別のユーザーのイベントをフェッチするためにスクリプトを実行するように求められ、このデータを数時間でフェッチする必要がありました。通常、私はスクリプトを開始して1日の大半を実行しますが(通常、ここには大量のデータがあるため)、今回はプロセスを高速化するために、スクリプトの4つのインスタンスを起動して、このデータをより高速にフェッチしました。いつもの。スクリプトの各インスタンスは異なる時間枠を調べていたため、4つのスクリプトをすべて組み合わせて、要求された時間枠でフェッチしていました。

3時間ほどの間に、このリモートコンピューターでユーザーIDに対して100万回以上の異なるログイン試行が行われました。ログイン数が多すぎて、最初に取得するように求められたイベントログデータを上書きしてしまいました。

学んだ教訓から、私は現在、これをより速く、より効率的に、そしてより信頼できるものにする方法を研究しています。

これが私のコードの核心であり、非常に単純で単純であり、ほとんどの部分で機能します。

$output = Get-EventLog `
    -instanceID 4672,4647,4634,4624,4625,4648,4675,4800,4801,4802,4803 `
    -logName Security `
    -after (Get-Date $inStartDate) `
    -before (Get-Date $inEndDate).addDays(1) `
    -message ("*" + $InUserID + "*") `
    -computerName $inPCID

これまでの研究では理解できなかった質問がいくつかあると思います。Get-EventLogがこれほど多くの接続を確立する必要があるのはなぜですか?接続が切れ続けたからなのか?

このデータをフェッチする最速の方法は何ですか-をGet-EventLog指定してネイティブコマンドを使用するか、またはの-ComputerNameようなものを使用する必要があります。 Enter-PSSessionInvoke-Command

両方とも私がEnter-PSSession抱えInvoke-Commandているのと同じ問題を抱えていGet-EventLogますか?

Enter-PSSession使用を避けたいのですInvoke-Commandが、社内のすべてのマシンでリモート実行が有効になることを保証できないという単純な事実のためです。

4

1 に答える 1

3

したがって、問題は、Get-EventLogフェッチしようとしたリモートイベントログを最終的に消去することでした。理由はわかりませんがGet-EventLog、ログオン/ログオフイベントとして表示される100万を超える「接続」が行われたため、ログが上書きされました。

@Richardのコメントによると、私は少し調査を行い、Get-WinEventの代わりに更新されたより強力なを使用してテストすることにしましたGet-EventLog。これを1週間試した後、私が遭遇した最悪のシナリオは、4つのログオン/ログオフイベントを作成するスクリプトでした。これは完全に受け入れられ、100万を超えるイベントよりもはるかに優れています。

このトピックに関連して私が持っていた副次的な質問はパフォーマンスでした。多くのリモートログを収集しているため、これをできるだけ早く実行する必要がある場合があります。私の質問は、またはと比較した場合Get-WinEventに、ログをプルするのに十分な速度であるかどうかです。Enter-PSSessionInvoke-Command

この質問の範囲についてはGet-WinEvent、速度要件とイベント要件の両方を満たし、コマンドレットに依存してリモート処理を実行することはうまくいきました。

私のコードは非常に単純ですが、記録上の理由で投稿します。

Get-WinEvent `
    -computerName $inPCID `
    -FilterHashtable @{LogName="Security";Id=4672,4647,4634,4624,4625,4648,4675,4800,4801,4802,4803; `
                       StartTime = $inStartDate; EndTime = $inEndDate} | Where-object {$_.message -like ("*" + $InUserID + "*")} `
    | export-csv $fullOutputFile
于 2012-05-09T17:42:21.293 に答える