特定のユーザーのイベントログをフィルタリングしたいのですが、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' }
「指定された選択基準に一致するイベントは見つかりませんでした」と表示されます。上記のコマンドで。しかし、UserId
キーを削除すると、長いリストが返されるため、logname
またはpath
に問題はありません。
代わりに-FilterXPath
オプションを使用してください!
次の例では、自分のマシンのセキュリティログのすべてのイベントをデスクトップのseclog.evtx
に保存し、SubjectUserSid S-1-5-18
(LOCAL 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"]]
特定のユーザー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フィルタリングを使用する よりクリーンな方法 もあります。
しかし、個人的にはまだそれらを必要としておらず、メッセージに一致するコンテンツでこれまでのところ十分です。