前回は、Windows Updateのスクリプトを使用した自動化に利用できる汎用的な方法と、Windows 10 バージョン1607およびWindows Server 2016で利用可能な新しいWMIプロバイダーについて説明しました。今回は、Windows 10 バージョン1709からの新機能を紹介します。
前回(第29回)、Windows 10 バージョン1607およびWindows Server 2016では、新たに「Windows Update WMI」プロバイダー(WMI名前空間root/Windows/MicrosoftUpdate)が実装され、このWMIプロバイダーのCIM(Common Information Model)クラス「MSFT_WUOperationsSession」とそのメソッドを使用して、更新プログラムの確認やダウンロードとインストール、更新履歴の確認ができることを紹介しました。
例えば、Windows PowerShellで次のようなコマンドラインを実行すれば、更新プログラムの確認、ダウンロードとインストールまでの処理を実行することができます。
$ci = New-CimInstance -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUOperationsSession $result = $ci | Invoke-CimMethod -MethodName ScanForUpdates -Arguments @{SearchCriteria="IsInstalled=0";OnlineScan=$true} $result.Updates Invoke-CimMethod -InputObject $ci -MethodName ApplyApplicableUpdates
前回は、この新しいCIMクラス「MSFT_WUOperationsSession」が一代限り、つまりWindows 10 バージョン1703以降で利用できなくなったことを指摘しました。
Windows 10 バージョン1709およびWindows Server, version 1709では、さらに改善されたCIMクラス「MSFT_WUOperations」が追加され、Windows 10 バージョン1803以降でも引き続き利用可能になっています。例えば、さらに新しいCIMクラス「MSFT_WUOperations」では、上記の処理は次のように記述できます。
$cm = Invoke-CimMethod -Namespace root/Microsoft/Windows/WindowsUpdate-ClassName MSFT_WUOperations -MethodName ScanForUpdates -Arguments@{SearchCriteria="IsInstalled=0"} $cm.Updates $result = Invoke-CimMethod -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUOperations -MethodName InstallUpdates -Arguments @{Updates = $cm.Updates}
詳しいことは説明しませんが、最後のコマンドラインが再起動の要否を返す($result.RebootRequiredがTrueまたはFalse)ことに注目してください。以前のCIMクラス「MSFT_WUOperationsSession」では、再起動の要否を判断できませんでした。これは大きな改善点です(画面1)。
Windows 10 バージョン1709およびWindows Server, version 1709以降で利用可能な新しいCIMクラス「MSFT_WUOperations」のコマンドラインの例については、これ以上説明しません。なぜなら、これらのOSではCIMクラス「MSFT_WUOperations」を使用したWindows PowerShell用の「WindowsUpdateProvider」モジュールが標準搭載されており、こちらを使用した方が簡単だからです(画面2)。
例えば、利用可能な更新プログラムを確認し、検出されたらダウンロードとインストールを行って、再起動が必要であれば再起動するということを、次の3行のコマンドラインで記述できます(画面3)。
$updates = Start-WUScan if ($updates.Count -gt 0) {Install-WUUpdates -Updates $updates} else {Write-Host "No update"} if (Get-WUIsPendingReboot) {Restart-Computer}
前回は、レガシーなWindows Update Agent(WUA)APIを使用するサンプルスクリプト「WUA_SearchUpdateInstall.vbs」が、新しいバージョンのWindows 10(少なくともバージョン1709以降で確認)において、毎月第二火曜日(日本ではその翌日の水曜日)以外にリリースされる「累積更新プログラム」を検出しないことを指摘しました。
これは「Start-WUScan」コマンドレットも同様のようです。Start-WUScanコマンドレットは、2018年6月末時点でWindows 10 バージョン1803向けに2018年6月27日に提供された累積更新プログラム「KB4284848」を検出しませんでしたが、「設定」アプリからWindows Updateを実行すると検出され、インストールされました(画面4)。
このように、Windows 10 バージョン1709以降の新しいCIMクラス「MSFT_WUOpearations」とWindows PowerShell用「WindowsUpdateProvier」モジュールは、Windows Updateのスクリプト化を簡単にする可能性を秘めていますが、現状、公開情報が少ない上、コマンドレットのヘルプも極めて簡単なものしかありません。一代限りだったCIMクラス「MSFT_WUOpearationsSession」の例もあります。現時点では、汎用的に利用でき、実績もあるWUA APIを利用するのが安心かもしれません。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.