web-dev-qa-db-ja.com

WindowsセキュリティイベントログをSIDでフィルターする方法

特定のユーザーのイベントログをフィルタリングしたいのですが、SAMIDで検索するオプションがないと思います。 here によると、UserIdによるフィルターがあります。以下のスクリーンショットでユーザーを検索するために、次の正しい構文は正しいですか?

$events = get-winevent -filterhashtable 
  @{ logname='security'; path="Archive-Security-2015-04-14-02-13-02-299.evtx";
  UserId='S-1-5-21-220523388-838170752-839522115-yyyy' }

Events

「指定された選択基準に一致するイベントは見つかりませんでした」と表示されます。上記のコマンドで。しかし、UserIdキーを削除すると、長いリストが返されるため、lognameまたはpathに問題はありません。

5
Old Geezer

代わりに-FilterXPathオプションを使用してください!

次の例では、自分のマシンのセキュリティログのすべてのイベントをデスクトップのseclog.evtxに保存し、SubjectUserSid S-1-5-18LOCAL SYSTEM)でイベントを検索しています。

$events = Get-WinEvent -Path "$HOME\Desktop\seclog.evtx" -FilterXPath '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'

スクリプトでは、ステートメントを少し読みやすくするために、おそらく スプラッティング テーブルを選択します(ここでは最後の10イベントに限定されます)。

$seclogSplat = @{
    'Path'        = "$HOME\Desktop\seclog.evtx"
    'FilterXPath' = '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'
    'MaxEvents'   = 10
}
$events = Get-WinEvent @seclogSplat

orを使用して、複数の非排他的基準を指定できます。

*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18" or Data[@Name="SubjectUserSid"] = "S-1-0-0"]]
6

特定のユーザーIDが存在するかどうかを確認する組み込みの方法は知りません。
ただし、SiDは一意でなければならないため、メッセージの内容を照合してSiDを見つけることができます。

$ events = get-winevent -logname security -path "Archive-Security-2015-04-14-02-13-02-299.evtx" |場所{$ _。message -match 'S-1-5-21-220523388-838170752-839522115-yyyy'}

XMLフィルタリングを使用する よりクリーンな方法 もあります。
しかし、個人的にはまだそれらを必要としておらず、メッセージに一致するコンテンツでこれまでのところ十分です。

2
Reaces