面倒な“Windows 10の更新”をスクリプト化できる新たな選択肢(その1)企業ユーザーに贈るWindows 10への乗り換え案内(29)

企業では、Windows Update/Windows Server Update Services(WSUS)によるWindows 10やWindows Serverの更新処理を、スクリプト化してユーザーの対話なしで自動実行させたいという要望があると思います。Windows 10およびWindows Serverで利用できる方法を幾つか紹介します。

» 2018年08月06日 05時00分 公開
[山市良テクニカルライター]
「企業ユーザーに贈るWindows 10への乗り換え案内」のインデックス

企業ユーザーに贈るWindows 10への乗り換え案内

全てのWindowsで利用できる「Windows Update Agent(WUA)API」

 Windows Updateの更新をスクリプト化する方法としては、古くから「Windows Update Agent(WUA)API」のCOM(Component Object Model)インタフェースの利用が知られています。

 WUA APIは、Windows XPおよびWindows Server 2003から利用できるレガシーなAPI(Application Programming Interface)であり、現在サポートされている全てのWindows(つまり、Windows 7 SP1以降)で利用できます。もちろん、Windows 10やWindows Server 2016、Windows Server,Semi-Annual Channelでも利用可能です。

 ゼロからスクリプトを記述する必要はありません。以下のWebサイトにあるサンプルスクリプトをそのまま使用できます(画面1)。

画面1 画面1 WUA APIの公開されているサンプルスクリプトは、そのままでWindows 10でも動作する

 上記のWebサイトでは「WUA_SearchDownloadInstall.vbs」という名前で保存して、次のように実行するように説明されていますが、ファイル名は何でも構いません。

cscript WUA_SearchDownloadInstall.vbs

 なお、Windows 10の場合は、「管理者」として開いたコマンドプロンプトで実行しないと、ダウンロード時にエラーが発生します。また、Windows 10の新しいバージョン(1703または1709以降)の場合、毎月第二火曜日(日本ではその翌日の水曜日)にリリースされる累積更新プログラムは検出しますが、それ以外にリリースされる累積更新プログラムは検出しないようです。

 この「WUA_SearchDownloadInstall.vbs」スクリプトは、インストール開始前にユーザーと対話して「Y/N」を問い合わせますが、その部分を削除するだけで簡単にユーザーとの対話を不要にできます。また、最後に再起動の要求を出力する部分があるので、その部分をカスタマイズすれば再起動まで含めて自動化できるでしょう。

 Windows Serverには「Server Core」インストール向けの「Sconfig」ユーティリティーがあります(Windows Server 2012以降は「GUI使用サーバー」でも利用可能)。Sconfigユーティリティーによる更新プログラムのダウンロードとインストールは、ほとんど同じコードを利用したスクリプトで実現されています(画面2)。具体的には、日本語版の環境であれば「%Windir%\System32\ja-jp\WUA_SearchDownloadInstall.vbs」にあるスクリプトです。ファイル名は全く同じですが、中身は少し異なります。

画面2 画面2 Windows ServerのServer Coreインストール向けSconfigユーティリティーは、GUI環境でも利用できる。Windows Updateの部分は「WUA_SearchDownloadInstall.vbs」(中身はサンプルそのものではない)を呼び出している

新しいWindows Update WMIプロバイダー(バージョン1607限定)

 Windows 10 バージョン1607およびWindows Server 2016では、新たに「Windows Update WMI」プロバイダー(WMI名前空間root/Windows/MicrosoftUpdate)が実装され、このWMIプロバイダーのCIM(Common Information Model)クラス「MSFT_WUOperationsSession」を使用して、更新プログラムの確認やダウンロードとインストール、更新履歴の確認ができるようになりました。

 このWMIプロバイダーについては、以下の「Nano Serverの更新」ドキュメントで説明されています。物理マシンまたは仮想マシンにインストールされたWindows Server 2016ベースのNano Serverの更新で利用できるWindows Updateの手段を提供するものとして新たに用意されたように見えますが、Windows 10 バージョン1607やWindows Server 2016(デスクトップエクスペリエンス、Server Core)でも利用できます。

 Nano ServerでWindows UpdateやWSUSからオンラインで更新プログラムを取得する方法は、このWMIプロバイダーを使用する方法以外に存在しません。ちなみに、Nano Serverには、もう一つ「Windowsコンテナー」のベースOSイメージとして提供されていますが、WindowsコンテナーはWindows Updateという概念がありません。

 更新プログラムの確認、ダウンロードとインストールを行うには、Windows PowerShellで次のようなコマンドラインを実行します(画面3)。更新プログラムの確認にはCIMクラス「MSFT_WUOperationsSession」の「ScanForUpdates」メソッドを、ダウンロードとインストールには「ApplyApplicableUpdates」メソッドを使用します。

$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
画面3 画面3 Windows Update WMIプロバイダーを利用した更新の確認、ダウンロードとインストール

 例えば、「$result.Updates.Count」が「1」以上なら、次の「ApplyApplicableUpdates」メソッドによるインストールに進むなど、自動実行のためのPowerShellスクリプト(.ps1)を作成できるでしょう。欠点があるとすれば、再起動が必要であるか否かを判断する方法が見当たらないことです(筆者が見つけられないだけかもしれません)。

 Windows Updateの更新履歴を確認するには、次のようなコマンドラインを実行します(画面4)。

$ci = New-CimInstance -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUOperationsSession
$result = $ci | Invoke-CimMethod -MethodName ScanForUpdates -Arguments @{SearchCriteria="IsInstalled=1";OnlineScan=$true}
$result.Updates
画面4 画面4 Windows Update WMIプロバイダーを利用した更新履歴の表示

 さらに、CIMクラス「MSFT_WUSettings」の「GetWUAVersion」メソッドを利用すると、Windows Updateエージェントのバージョン番号を取得できます。

Invoke-CimMethod -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUSettings -MethodName GetWUAVersion

 なお、Windowsでは、Windows Updateエージェントのバイナリである「C:\Windows\System32\wuaueng.dll」のファイルバージョンをWindows Updateエージェントのバージョンとするのが慣例ですが、「GetWUAVersion」メソッドではWindows UpdateクライアントAPIである「C:\Windows\System32\wuapi.dll」のバージョンを報告することに注意してください。

CIMクラス「MSFT_WUOperationsSession」はWindows 10 バージョン1703で無効に

 実は、Windows 10 バージョン1703でWindows Update WMIプロバイダーのCIMクラス「MSFT_WUOperationsSession」を使用したコードは、エラーになります(画面5)。Windows 10 バージョン1703でもCIMクラス「MSFT_WUOperationsSession」は引き続き利用可能のように見えますが、期待通りには動作しません。

画面5 画面5 CIMクラス「MSFT_WUOperationsSession」は、Windows 10 バージョン1703では無効なクラスとして期待通りに機能しない

 この問題は、より新しいCIMクラス「MSFT_WUOperations」が、Windows 10 バージョン1709とWindows Server, version 1709で登場するまで待つ必要があります。この件に関しては、次回に詳しく説明します。

 言い換えるなら、Windows Update WMIプロバイダーを利用したスクリプトは、Windows 10 バージョン1607およびWindows Server 2016だけで利用可能な方法であり、汎用的ではありません。広範囲のバージョンをサポートする必要がある場合は、従来の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.

「Windows 7」サポート終了 対策ナビ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。