業務用ノートPCや社用端末で「いつ・どこでWi-Fiに接続したか」を確認したいケースは多くあります。WindowsではWi-Fiの接続履歴がイベントログに記録されており、PowerShellを使ってこれらの情報を抽出することができます。この記事では、Wi-FiのSSIDや接続時刻をログから取得する方法を紹介します。
Wi-Fi接続ログの記録先
Wi-Fi関連の接続履歴は、Windowsの「Microsoft-Windows-WLAN-AutoConfig」ログに記録されています。
- ログ名:
Microsoft-Windows-WLAN-AutoConfig/Operational
- イベントID:8001(接続成功)
イベントログから接続履歴を取得するスクリプト
$logName = "Microsoft-Windows-WLAN-AutoConfig/Operational"
$events = Get-WinEvent -LogName $logName -FilterXPath "*[System[(EventID=8001)]]" -MaxEvents 100
foreach ($event in $events) {
$xml = [xml]$event.ToXml()
$ssid = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SSID" }).'#text'
$time = $event.TimeCreated
Write-Output "$time - 接続先 SSID: $ssid"
}
このスクリプトでは、過去100件の接続成功イベント(ID: 8001)を取得し、SSIDと接続時刻を一覧表示します。
最近7日間のWi-Fi接続履歴を抽出する
$startTime = (Get-Date).AddDays(-7)
$events = Get-WinEvent -LogName $logName -FilterXPath "*[System[(EventID=8001) and TimeCreated[@SystemTime>='$($startTime.ToUniversalTime().ToString("o"))']]]"
foreach ($event in $events) {
$xml = [xml]$event.ToXml()
$ssid = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SSID" }).'#text'
$time = $event.TimeCreated
Write-Output "$time - 接続先 SSID: $ssid"
}
CSV形式で保存する例
$records = @()
foreach ($event in $events) {
$xml = [xml]$event.ToXml()
$ssid = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SSID" }).'#text'
$records += [PSCustomObject]@{
Timestamp = $event.TimeCreated
SSID = $ssid
}
}
$records | Export-Csv -Path "C:\Logs\wifi_history.csv" -NoTypeInformation -Encoding UTF8
補足:イベントログが無効な場合の確認と有効化
このログが無効になっている場合は、次の手順で有効にできます:
- イベントビューアーを起動(
eventvwr.msc
) アプリケーションとサービスログ > Microsoft > Windows > WLAN-AutoConfig > Operational
を右クリック- 「ログの有効化」にチェックを入れる
まとめ
PowerShellを使えば、Windowsが記録しているWi-Fi接続ログからSSIDや接続時刻を自動で抽出・保存することができます。外出先の接続履歴を確認したい場合や、セキュリティ・監査対応として過去ログを記録しておきたい場面において、非常に役立つスクリプトです。CSV化して定期取得すれば、資産管理にも活用可能です。