SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

直近の Windows Update の実行状態をスクリプトで取得する

leave a comment

Windows10でのWindows Update関連のレジストリについて に記載されている内容になるのですが、Windows 10 / Windows Server 2016 以降で、直近の Windows Update の実行状態を確認する方法を。

イメージとしては、「設定」の次の画面の表示に近い内容の取得方法です。
image

冒頭で紹介した TechNet フォーラムにも記載いただいていますが、上述の画面の最終チェック日等の情報については、「C:\ProgramData\USOPrivate\UpdateStore」配下の XML ファイルに情報が出力されているようです。
Windows 10 以降の、この辺の更新については USO : Update Orchestrator Service でいろいろな情報を検索することになりますね。
上述のディレクトリには次の二つのファイルが出力されています。

  • UpdateCspStore.xml
  • updatestore{GUID}.xml

情報の確認をするのは GUID が含まれているファイルですね。
こちらのファイルには直近で実行された Windows Update についての様々な情報が出力されているようです。
まずは、TechNet Forum でも触れられている「LastUpdateCheckTime 」の値を見てみます。

[xml]$xml = Get-Content -Path "C:\ProgramData\USOPrivate\UpdateStore\updatestore*.xml"  -Encoding "UTF8"
(Get-Date ([int64]($xml.updateStore.sessionVariables.permanent.LastUpdateCheckTime.'#text'))).AddYears(1600).AddHours(9)

 
image
2019/8/10 12:10 に Windows Update が実行されたということが XML から取得できましたね。
この情報は GUI の次の表示と一致しているようです。
image
日付系についてはほかにも様々な情報があるようですので、用途に応じて使用する項目を変えて日付を確認してみることで、必要とする情報が取れるのではないでしょうか。
更新プログラムが認識された場合は、Updates のノード配下に情報が出力されていますので、その情報を取得することで更新プログラムの情報を確認することもできます。

[xml]$xml = Get-Content -Path "C:\ProgramData\USOPrivate\UpdateStore\updatestore*.xml" -Encoding "UTF8"
$updateList = New-Object System.Collections.Generic.LinkedList[PSCustomObject]
foreach($updateItem in $xml.updateStore.updates){
    $updateList.Add([PSCustomObject]@{
        Title = $updateItem.update.extendedProperties.Title.'#text'
        UpdateStatus = $updateItem.update.extendedProperties.UpdateStatus.'#text'
    })
}
$updateList | ft

 
image
image
同等の情報が取得できていますね。
XML の内容については詳細な情報がなかったので、UpdateStatus の値に応じてどのようなステータスになっているのかの詳細な情報は確認できていないのですが、この辺は実機で確認しなが調整を行う形でしょうか。
この辺の情報は WSUS (Windows Server Update Services) のレポートでも確認することができますが、WSUS のレポートは実際に運用をしていると、よく見ると環境との差異が見られることもあります。
XML は 1 世代分しか保持されていないようですので、直近の情報のみの確認になりますが、実機ベースで確認したい場合は、このような方法があることを覚えておいても良いのではないでしょうか。
PSRemoting 経由で実行できれば、リモートからも情報を収集することができますので。
更新プログラムの情報を取得する方法としては、次のようなものも定番かとおもいますので、組み合わせることで目的の情報が取れると運用で便利になることがあるかと思います。

  • WMI で Quick Fix Engineering (wmic qfe / Get-HotFix) を使用する
  • COM の Microsoft.Update.Session を使用する
Share

Written by Masayuki.Ozawa

8月 10th, 2019 at 6:30 pm

Posted in Windows Client,Windows Server

Tagged with

Leave a Reply