[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】ログイン失敗履歴をWindowsイベントログから取得する



更新日:2022/03/13

このページではWindows 環境においてそのPCに対してのログイン失敗履歴をファイルに記録するサンプルプログラムを紹介します。
プログラムはWindows 標準のシェルである Powershell で記載しています。

ログイン失敗はセキュリティイベントログの ID 4625 で記録されます。このイベントログを検索して、ヒットした場合にファイルに記録する方針としています。他のやり方も多数あると思います。

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。


このサンプルではセキュリティイベントログに関して一週間以内でログオン失敗したイベントを抽出していてます。


$weekAgo = $today.adddays(-7)


で一週間前を7日として計算しています。この数字を変更すればチェックする期間を修正することが可能です。-7 を -1 にすれば1日分の範囲をチェックすることが可能です。
イベントIDはログイン失敗として イベントID=4625 を抽出しています。

ID 4625 のサンプルイベントは次のとおりです。


ログの名前: Security
ソース: Microsoft-Windows-Security-Auditing
日付: 2021/12/10 23:00:00
イベント ID: 4625
タスクのカテゴリ: Logon
レベル: 情報
キーワード: 失敗の監査
ユーザー: N/A
コンピューター: PCNAME
説明:
アカウントがログオンに失敗しました。

サブジェクト:
セキュリティ ID: SYSTEM
アカウント名: PCNAME$
アカウント ドメイン: WORKGROUP
ログオン ID: 0x3E7

ログオン タイプ: 2

ログオンを失敗したアカウント:
セキュリティ ID: NULL SID
アカウント名: username
アカウント ドメイン: PCNAME

エラー情報:
失敗の原因: ユーザー名を認識できないか、またはパスワードが間違っています。
状態: 0xC000006D
サブ ステータス: 0xC000006A

プロセス情報:
呼び出し側プロセス ID: 0x76c
呼び出し側プロセス名: C:\Windows\System32\svchost.exe

ネットワーク情報:
ワークステーション名: PCNAME
ソース ネットワーク アドレス: 127.0.0.1
ソース ポート: 0

詳細な認証情報:
ログオン プロセス: User32
認証パッケージ: Negotiate
移行されたサービス: -
パッケージ名 (NTLM のみ): -
キーの長さ: 0

このイベントは、ログオン要求が失敗した場合に生成されます。このイベントは、アクセスを試行したコンピューターで生成されます。

サブジェクトのフィールドは、ログオンを要求したローカル システム上のアカウントを示します。これは、サーバー サービスなどのサービスまたは Winlogon.exe や Services.exe などのローカル プロセスであることが最も一般的です。

ログオン タイプのフィールドは、要求されたログオンの種類を示します。最も一般的なタイプは、2 (対話型) と 3 (ネットワーク) です。

プロセス情報のフィールドは、ログオンを要求したシステム上のアカウントとプロセスを示します。

ネットワーク情報のフィールドは、リモート ログオン要求の送信元を示します。ワークステーション名は、常に表示されるとは限らず、場合によっては空白のままであることがあります。

認証情報のフィールドは、この特定のログオン要求に関する詳細情報を示します。
- 移行されたサービスは、このログオン要求に関与した中間サービスを示します。
- パッケージ名は、NTLM プロトコルのうち使用されたサブプロトコルを示します。
- キーの長さは、生成されたセッション キーの長さを示します。これは、セッション キーが要求されなかった場合は 0 になります。




当然イベントログに記録されていない場合は抽出できません。イベントログのサイズを指定して切り捨てられる場合や、保存期間を指定している場合には注意が必要です。

サンプルコード:

$today = ([Datetime](get-date -format "yyyy/MM/dd"))

$weekAgo = $today.adddays(-7)
$logfilename = "c:\temp3\LogonFailed.log"

get-eventlog Security -InstanceId 4625 -EntryType FailureAudit -After $weekAgo -Before $today | Format-List > $logfilename







[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018