2012-05-02 46 views
3

PowerShellでイベントログをリモートから取得するスクリプトを作成しましたが、スクリプトが独自のイベントログエントリを作成する方法のファンではありません。Get-EventLogをリモートで実行すると実際のイベントログが消去される

特にこのスクリプトは、ログオン/ログオフイベントを含むいくつかのタイプのイベントIDを取得します。最近、別のユーザーのイベントを取得するためにスクリプトを実行するように求められ、このデータを数時間で取得する必要がありました。通常、私はスクリプトを開始し、その日の大部分を実行します(通常、ここにはたくさんのデータがあるため)。しかし、このプロセスを高速化するために、このデータを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は非常に多くの接続を行う必要がありますか?それは接続が落ち続けていたかどうかですか? -ComputerNameを指定、または私はEnter-PSSessionまたはInvoke-Commandようなものを使用しなければならないことにより、ネイティブGet-EventLogコマンドを使用する - このデータをフェッチするための最速の方法は何だろう

Enter-PSSessionInvoke-Command私はGet-EventLogと同じ問題がありますか?

Enter-PSSessionInvoke-Commandは、社内のすべてのマシンでリモート実行が有効になることを保証するものではありません。

+1

どのように 'は、Get-WinEvent'を使用しない - 'は、Get-Event'の新しい、より強力な交換が比較? – Richard

+0

@リチャードうわー、実際にGet-WinEventはうまく動作するようです。私はあなたが何かを言うまでGet-Eventが古いと気づいていませんでした。私のスクリプトは長い間うまく機能していて、突然何かが間違っていることに気付きました。今はうまくいくように見える!テストを続けます。 – Boeckm

答えて

3

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

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

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

この質問の範囲では、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 
関連する問題