PowerShellを使ってセキュリティログから特定のイベントIDをフィルタリングする方法

Security event ID filterでは、表示名ではなくLogName・ID配列・time range・RecordIdを最初の対象キーにします。変更や集計へ進む前に4624等をbounded queryしたobjectを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「event propertyと件数を同じfilterで再現できる状態」です。Microsoft Learn:Get-WinEvent FilterHashtableのId配列とevent 4624 field definitionが定義するGet-WinEvent FilterHashtableのId配列とevent 4624 field definitionを根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:Security log権限不足や保持期間外。該当するときは操作を進めず、読み取りだけなのでfilterを保存し再実行するを実行可能な形で確認してから再計画します。

目次

Security event ID filter|読むだけか変更かを決める:event propertyと件数を同じfilterで再現できる状態

SecurityログのイベントID抽出は読み取りで完結できます。Get-Dateの対象件数とGet-WinEventの結果が一致し、エラーを除外していないことが合格条件です。

セキュリティログとはの確認では、成功メッセージよりGet-WinEventの実データを優先します。ログ無効、保持期間超過、Provider名の相違、読み取り権限不足が残るときは、正常なゼロ件として扱いません(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。

判断要素SecurityログのイベントID抽出で記録する内容
対象の識別LogName、ProviderName、Event ID、TimeCreated
最初の確認Get-Date
変更または操作Get-WinEvent
再確認Get-WinEvent
中止条件障害調査や監査の証拠を消す操作が含まれ、保管承認がない

Security event ID filter|操作対象の境界を引く:LogName・ID配列・time range・RecordId

SecurityログのイベントID抽出で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-Date で確認します。Securityログの読み取り権限。対象候補が複数ならLogName、ProviderName、Event ID、TimeCreatedを使い、表示名の部分一致だけで選びません(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。

  • SecurityログのイベントID抽出: 実行端末と現在ユーザーを記録する
  • Get-Date: Source、Version、利用可能なパラメーターを確認する
  • LogName、ProviderName、Event ID、TimeCreated: 変更前の値を日時付きで保存する(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。
  • EVTX、抽出条件、最初と最後のRecord ID、保存先ACL: 復旧に使えることを読み取り確認する(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。
  • 障害調査や監査の証拠を消す操作が含まれ、保管承認がない: 該当すれば本番実行を見送る

Security event ID filter|変更前snapshotを残す:4624等をbounded queryしたobject

SecurityログのイベントID抽出の読み取り例を示します。最初は通常権限で試し、アクセス拒否が出た箇所だけ必要権限を確認します。

$filter = @{ LogName='Security'; Id=4624; StartTime=(Get-Date).AddHours(-24) }
Get-WinEvent -FilterHashtable $filter -MaxEvents 100 | Select-Object TimeCreated, Id, ProviderName, Message

Get-Dateの結果はチャネル、プロバイダー、期間、イベント件数を固定して再抽出する順に読みます。件数、固有ID、状態、取得時刻を保存すると、後のGet-WinEventと比較できます。

Security event ID filter|誤判定につながる条件を切る:localized Message文字列だけでfield判定すること

Securityログ抽出では開始・終了時刻、Event ID、RecordId、実行端末、権限を保存します。読み取り拒否をゼロ件へ丸めず、対象期間と監査ポリシーを確認してから再実行します。

SecurityログのイベントID抽出で「セキュリティログとは」を扱うときは、セキュリティログとはの表示名だけでなくLogName、ProviderName、Event ID、TimeCreatedを記録します。Get-WinEventでも同じ対象が返ることを確かめます。

「基本的なコードの構造」の値が想定と違う場合、ログ無効、保持期間超過、Provider名の相違、読み取り権限不足を切り分けます。イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する。 ため、基本的なコードの構造を強制的に書き換えて症状を隠しません。

「Get-EventLogコマンドレット」を検証する際はチャネル、プロバイダー、期間、イベント件数を固定して再抽出する順序を崩しません。SecurityログのイベントID抽出の別スコープや別ユーザーの値を混ぜないことが重要です。

FilterHashtableへLogName、Id、StartTime、EndTimeを渡してserver-sideで範囲を限定します。Message文字列の後段検索だけで認証イベントを選ばず、必要なEventDataはXMLのName属性で確認します。

最新10件は表示サンプルであり、対象期間の総件数ではありません。監査用途では期間とIDを固定した抽出結果を保存し、MaxEventsで切り詰めたことを記録します。

Get-Dateの空結果は成功とは限りません。SecurityログのイベントID抽出ではログ無効、保持期間超過、Provider名の相違、読み取り権限不足を調べ、エラーを非表示にした場合も件数へ含めます。

SecurityログのイベントID抽出でGet-WinEventが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。

Select-ObjectはSecurityログのイベントID抽出の3番目の確認手段です。Get-Help Select-Object -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。

SecurityログのイベントID抽出でGroup-Objectを使う前に、Get-Command Group-ObjectでSourceとVersionを確認します。別モジュールの同名コマンドを実行しないためです。

Security event ID filter|rollback可能性を実行前に測る:読み取りだけなのでfilterを保存し再実行する

SecurityログのイベントID抽出は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。

Security event ID filter|最小scopeで操作を組み立てる:LogName・ID配列・time range・RecordId

SecurityログのイベントID抽出の追加確認例です。システムを変更する命令ではなく、Get-Dateの結果を別の列や範囲で確かめる目的で使います。

Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4624,4625; StartTime=(Get-Date).AddDays(-1) } -MaxEvents 500 | Group-Object Id | Select-Object Name, Count

イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する。 そのため、Get-WinEventの結果が期待どおりでも環境固有の制約を再確認します。

Security event ID filter|利用側の結果まで確かめる:event propertyと件数を同じfilterで再現できる状態

「PowerShellを使ってセキュリティログから特定のイベントIDをフィルタリングする方法」でSecurityログのイベントID抽出を判断する場面では、Get-WinEventでは、変更前に保存したLogName、ProviderName、Event ID、TimeCreatedと同じ対象を選びます。チャネル、プロバイダー、期間、イベント件数を固定して再抽出することで、別スコープの値を成功結果として採用しません(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。

Get-WinEvent -ListLog Security | Select-Object RecordCount, FileSize, MaximumSizeInBytes, IsEnabled
  • Get-WinEvent: 同じ対象IDを再取得できた
  • SecurityログのイベントID抽出: 意図した値または件数だけが変化した
  • チャネル、プロバイダー、期間、イベント件数を固定して再抽出する: 関連機能も異常がない
  • ログ無効、保持期間超過、Provider名の相違、読み取り権限不足: 取得失敗をゼロ件として扱っていない(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。
  • イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する。: 環境固有の制約に反していない

Security event ID filter|続行しない境界を明示する:Security log権限不足や保持期間外

SecurityログのイベントID抽出でアクセス拒否が出た場合は、すぐ管理者として再実行せずSecurityログの読み取り権限という必要範囲を確認します。対象側のACLや管理ロールも分けて調べます。

SecurityログのイベントID抽出が時間経過後に元へ戻る場合は、GPO/MDM、同期、サービス再起動、別スコープを調べます。繰り返し上書きして管理設定と競合させません。

SecurityログのイベントID抽出で予想外の警告が一件でも出たら、対象数と時刻を記録して停止します。別の設定変更で警告を相殺しようとしません。

Security event ID filter|rollback後も同じ検証を行う:読み取りだけなのでfilterを保存し再実行する

読み取りのみなら復旧不要。抽出結果は資格情報や端末情報を含むため、アクセス制御と保管期限を設定する。

SecurityログのイベントID抽出を戻した後はGet-DateとGet-WinEventを再実行し、LogName、ProviderName、Event ID、TimeCreatedが変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存したEVTX、抽出条件、最初と最後のRecord ID、保存先ACLとログを担当者へ渡します(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。

Security event ID filter|監査で追える証拠をまとめる:4624等をbounded queryしたobject

  • Get-Dateの実行時刻、対象件数、エラー件数を残した
  • LogName、ProviderName、Event ID、TimeCreatedで対象を一意に特定した(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。
  • EVTX、抽出条件、最初と最後のRecord ID、保存先ACLを変更前に保存して読めることを確認した(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。
  • Get-WinEventの対象を一端末・一ユーザー・一設定に限定した
  • Get-WinEventと実利用テストの両方を確認した
  • 障害調査や監査の証拠を消す操作が含まれ、保管承認がない場合は実行を中止した

断定できません。SecurityログのイベントID抽出ではログ無効、保持期間超過、Provider名の相違、読み取り権限不足でも空になります。エラーを表示し、権限とスコープを確認してからGet-WinEventまたは別の公式な取得方法で照合します(SecurityログのイベントID抽出ではMicrosoft Learn:Get-WinEventの適用範囲に照らし、Get-DateとGet-WinEventの差分だけを採用します)。

Security event ID filter|例外条件を質問から整理する:複数IDを一回のqueryへ渡す方法

権限だけが原因とは限りません。イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する。 障害調査や監査の証拠を消す操作が含まれ、保管承認がないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(SecurityログのイベントID抽出では「イベントIDだけで意味を断定せずProvider、ログオンタイプ、Status/SubStatus、対象アカウントを相関する」を満たさなければGet-WinEventを続けません)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次