2017/08/10

Windows 10 の更新の履歴を取得するその他の方法

昨日、Windows 10 バージョン 1607 と Windows Server 2016 で発生した「消えた更新の履歴事件」

緊急報告: 8 月の更新後に Windows 10 ver 1607 と Windows Server 2016 の更新の履歴が消える(タイトル変更&追記あり)

に関連して、更新の履歴を取得する別の方法をいくつか...

Get-HotFix または WMIC QFE

Windows 標準のコマンドレット/コマンドを使う方法。情報量は少ないですが、インストール日と KB 番号を取得できます。

信頼性モニター 

知る人ぞ知る信頼性モニターは、[コントロール パネル > システムとセキュリティ > セキュリティとメンテナンス > 信頼性履歴の表示]から開けます。「消えた更新の履歴事件」があった PC でも、こちらからは消失していませんでした。


WindowsUpdate.log

Windows 10 以降、従来の WindowsUpdate.log (C:\Windows\WindowsUpdate.log)は廃止され、Get-WindowsUpdateLog で生成する方法に置き換わりました。詳しくは、http://go.microsoft.com/fwlink/?LinkId=518345 にて。ただし、Windows 10 バージョン 1607 以前および Windows Server 2016 では、ほとんど役に立ちません。
ビルド 14393.693 以降で改善されたような話(→ How to read Windows Update logs in Windows 10 Version 1607 http://www.aitltd.com/2017/02/16/how-to-read-windows-update-logs-in-windows-10-version-1607/)もありますが、私のところではほとんど無意味な情報だけ。
 
ちなみに、Windows 10 Creators Update バージョン 1703 からは少しましになりました(日本語は解さないようですけど)。



イベント ビューアー(システム ログ)

イベント ビューアーでシステム ログに記録されているイベントから、Windows Update の状況を追跡できます。ソース:WindowsUpdateClient、イベント ID: 19(インストールの成功)、20(インストールの失敗)、43(インストールの開始)、44(ダウンロードの開始(どの更新というわけではなく))あたりをフィルターしてあげれば分かりやすいかと。

Get-WinEvent

Get-WinEvent コマンドレットを使うと、詳細なフィルター条件でイベントを抽出できます。以下の例は、ソース:WindowsUpdateClient、イベント ID: 19(インストールの成功)、20(インストールの失敗)、43(インストールの開始)のイベントを、過去 7 日間のシステム ログから取得する例。ちなみに、過去 24 時間は 86400000 秒、過去 7 日は 604800000 秒、過去 30 日は 2592000000 秒。

Get-WinEvent -LogName System -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-WindowsUpdateClient'] and (EventID=19 or EventID=20 or EventID=43) and TimeCreated[timediff(@SystemTime) <= 604800000]]]"

Message (イベントの説明)が切れてしまってわかり難いので、こうすると、可読性が高まります。

Get-WinEvent -LogName System -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-WindowsUpdateClient'] and (EventID=19 or EventID=20 or EventID=43) and TimeCreated[timediff(@SystemTime) <= 604800000]]]"
|Select TimeCreated,Message | Format-List



Get-WinEvent (応用)

先ほどの例に、システムの再起動を含めてあげると、さらに分かりやすいかも。イベント ソース:Kernel-General、イベント ID:12(OS の起動)、13(OS のシャットダウン)あたりをフィルターに含めると、こんな感じ。

Get-WinEvent -LogName System -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-Kernel-General' or @Name='Microsoft-Windows-WindowsUpdateClient'] and (EventID=12 or EventID=13 or EventID=19 or EventID=20 or EventID=43) and TimeCreated[timediff(@SystemTime) <= 604800000]]]" |Select TimeCreated,Message | Format-List


Get-WinEvent の -FilterXPath パラメーターの指定が難しそうに見えるかもしれませんが、イベント ビューアーの[現在のログをフィルター]ダイアログ ボックスの[フィルター]タブの GUI でカスタム フィルターを作成し、[XML]タブに切り替えると...
 http://ec.nikkeibp.co.jp/item/books/P98960.html<PR>

-FilterXPath パラメーターの話の続きに関しては、『Windows Sysinternals徹底解説 改訂新版』(日経BP社)の「9.3.3 Sysmonイベントデータの抽出」(p344)をご覧ください。

<PR>


2 件のコメント:

匿名 さんのコメント...

http://www.atmarkit.co.jp/ait/articles/1708/10/news009_2.html
「15063.489(2017年7月11日リリース)」のところ
「489」→「483」ではないでしょうか。

山市 良 さんのコメント...

ご指摘ありがとうございます。修正を指示しました。