面倒な“Windows 10の更新”をスクリプト化できる新たな選択肢(その1):企業ユーザーに贈るWindows 10への乗り換え案内(29)
企業では、Windows Update/Windows Server Update Services(WSUS)によるWindows 10やWindows Serverの更新処理を、スクリプト化してユーザーの対話なしで自動実行させたいという要望があると思います。Windows 10およびWindows Serverで利用できる方法を幾つか紹介します。
全ての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でも利用可能です。
- Windows Update Agent API[英語](Microsoft Docs)
ゼロからスクリプトを記述する必要はありません。以下のWebサイトにあるサンプルスクリプトをそのまま使用できます(画面1)。
上記の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 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 IT Pro Center)
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
例えば、「$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
さらに、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」は引き続き利用可能のように見えますが、期待通りには動作しません。
この問題は、より新しい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.
関連記事
- Microsoft、業務PC自動セットアップツール「Windows AutoPilot」を提供
Microsoftは「Windows 10 Fall Creators Update」で、IT管理者向けに組織内へのPC展開と管理を容易にする一連の新機能「Windows AutoPilot」を提供する。 - Windows 10 Fall Creators Updateに搭載される「次世代」のセキュリティ機能
Microsoftが「Windows 10 Fall Creators Update」に搭載する次世代セキュリティ機能を紹介。「Windows Defender ATP」に含まれるツールを大幅に拡充することを明らかにした。 - 「Windows 10 Fall Creators Update」に搭載される新機能まとめ
マイクロソフトはWindowsの次期大型アップデート「Windows 10 Fall Creators Update」を2017年後半にリリースすると発表。Windows MRやiOS/Androidも包括したマルチプラットフォーム対応など、コンシューマー/技術者それぞれに向けた新機能を多数リリースする。 - Windows 10 Creators Updateがやってきた!――確実にアップグレードする方法を再確認
2017年4月6日(日本時間、以下同)、Windows 10の最新バージョンである「Windows 10 Creators Update」が正式にリリースされ、利用可能になりました。4月12日からはWindows Updateを通じた配布が段階的に始まります。