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-PSSession
Invoke-Command
両方とも私がEnter-PSSession
抱えInvoke-Command
ているのと同じ問題を抱えていGet-EventLog
ますか?
Enter-PSSession
使用を避けたいのですInvoke-Command
が、社内のすべてのマシンでリモート実行が有効になることを保証できないという単純な事実のためです。