再起動やその原因をログから再現する
ログには、シャットダウンや起動の記録があるが、これだけだと、原因がわからない。たとえば、Windows 10でもいきなり落ちてしまうこともあれば、ユーザーが再起動することもある。できれば、WindowsUpdateが原因の再起動のみをしらべたい。
まずは、シャットダウンと再起動だが、Windowsのカーネルからのログ「Microsoft-Windows-Kernel-General」にそれらしいものがある。Idとしては「12」(起動)、「13」(シャットダウン)がある。ただし、メッセージにある予定時間は、
id=12:`Properties.value[6]`に再起動予定時間
id=13:`Properties.value[0]`にシャットダウン予定時間
となる。では、Get-WinEventでこれを取り出してみよう。
Get-WinEvent -Path C:\Windows\system32\winevt\Logs\System.evtx -FilterXPath "Event/System[EventID=12 and Provider[@Name='Microsoft-Windows-Kernel-General']]" | Select-Object RecordID,TimeCreated,Id,Message | Sort-Object RecordID
これでリストから起動時のログを取り出すことができる。
EventIDのところを13にすればシャットダウンのログを取り出せる。実際にやってみると、シャットダウンの予定時刻が起動の後になっていることがある。
簡単にコマンドのオプションを解説する。まず最初の「-Path C:\Windows\System32\winevt\Logs\System.evtx」は、システムログを指定している。
次の「-FilterXPath」以下は、XPathによる対象レコードの指定。イベントログはバイナリー形式だが、XMLとして扱えるようになっているようだ。イベントビューアーで、ソースが「Kernel-General」のものを選択し、詳細タブで「XMLで表示」を選ぶと、XML表現されたログレコードを見ることができる。
全体はEventタグで囲われていて、その中に「System」タグと「EventData」タグがある。 「-FilterXPath」では、このXMLの中のタグと内容を指定して条件を満たすログレコードのみを取り出すわけだ。意味としてはEventIDが12、ProviderのName属性がMicrosoft-Windows-Kernel-Generalになっているものが指定されている。このXPathでは、[]の中は、同じタグレベルを表す。つまり、「Event/System[」は、Eventタグの中のSystemタグのさらに中という意味になり、EventIDとProviderは同じレベルにあることを示す。さらに@Nameは、Providerタグの属性「name=」の部分を表す。
その後ろには、出力するプロパティを選択する「Select-Object」と、RecordIdで並べ替えを行うSort-Objectが続く。
なお、Get-WinEventは、「System.Diagnostics.Eventing.Reader.EventLogRecord」というオブジェクトを出力する。このオブジェクトについては、上記のコマンドの「| select-Object……」以下を「| get-member」に置き換えてみるとわかる。
これで、システムの起動時間がわかる。EventID=12を「EventID=13」とすれば、シャットダウンのログを取ることができ、2つを合わせると、再起動の様子を調べることが可能だ。
evtxファイルは中身はバイナリーで、しかも何も記録がなくても、70KBほどの大きさがある。しかも、XMLのように扱えることから、元のレコードは、XMLを圧縮したかのような形になっていると想像される。
これで思い出すのがWinFSである。Vistaに搭載されるはずだったWinFSでは、ファイルはすべてデータベースのようなレコード定義(スキーマ)を持ち、Windowsが自由にレコードやフィールドを扱うことができた。これは、XMLデータベースをベースにしていると言われ、ファイルのスキーマ(テンプレート)は、XML形式になっていた。evtx形式は、このWinFSの残骸なのではないか?そんな気がしてきた。
さて、次回は、再起動の理由やWindows Updateのログなどを扱い、Windows Updateから再起動に関わるログを取り出して、Excelで扱えるようにする。
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る - この連載の一覧へ