Windows UpdateをPowerShellコマンドから実行する方法

MiniTool_ad

Windows UpdateをPowerShellコマンドから実行する方法

企業などでは、Windows 10マシンの更新を管理する場合、WSUS、Windows Intune、SCCMなどのMicrosoft製のツールを利用して集中管理するのが一般的ですが、ツールを利用するほど台数が多くない場合は、更新処理をスクリプト化してみてはいかがでしょうか。

更新処理をスクリプト化して、更新結果をテキストファイルでファイルサーバーなどに保存するようにしておけば、一台ずつ画面を開いて更新結果を確認する手間を削減することができます。

更新処理をスクリプト化する場合、ほぼすべてのWindowsで利用が可能な「Windows Update Agent API」を利用してスクリプト化するのが一般的ですが、ここでは、Windows 10バージョン1709以降で利用が可能になったWindows PowerShell用の「WindowsUpdateProvider」モジュールを利用して、Windows 10の更新処理をスクリプト化する方法を紹介します。

Memo

Windows PowerShell用の「WindowsUpdateProvider」モジュールは、Windows 10バージョン2004で廃止されているのでご注意ください。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit1809

WindowsUpdate関連のコマンド

「WindowsUpdateProvider」モジュールでは、以下のWindowsUpdate関連のコマンドレットが搭載されています。

PS> Get-Command -Module WindowsUpdateProvider

CommandType     Name                           Version    Source
-----------     ----                           -------    ------
Function        Get-WUAVersion                 1.0.0.2    WindowsUpdateProvider
Function        Get-WUIsPendingReboot          1.0.0.2    WindowsUpdateProvider
Function        Get-WULastInstallationDate     1.0.0.2    WindowsUpdateProvider
Function        Get-WULastScanSuccessDate      1.0.0.2    WindowsUpdateProvider
Function        Install-WUUpdates              1.0.0.2    WindowsUpdateProvider
Function        Start-WUScan                   1.0.0.2    WindowsUpdateProvider

Get-WUAVersion - WindowsUpdateエージェントのバージョンが返されます。

Get-WUIsPendingReboot - 更新プログラムの適用に再起動が必要な場合は「True」、ない場合は「False」が返されます。

Get-WULastInstallationDate - 最後に更新プログラムのインストールに成功した日時が返されます。

Get-WULastScanSuccessDate - 最後に更新プログラムの有無をチェックした日時が返されます。

Start-WUScan - 利用可能な更新プログラムがあれば、一覧が返されます。

Windows UpdateをPowerShellコマンドから実行する方法

Install-WUUpdates - 利用可能な更新プログラムのダウンロードとインストールを実行します。

更新用スクリプトの作成例

上のコマンドレットを使って、更新プログラムをインストールする簡単なスクリプトは次のような感じです。

$updates = Start-WUScan
if ($updates.Count -gt 0) {Install-WUUpdates -Updates $updates} else {Write-Host "利用可能な更新プログラムはありません。"}
if (Get-WUIsPendingReboot) {Write-Host "更新を完了するには再起動が必要です。"}

上のスクリプトは、次のような処理の流れになります。

  1. 利用可能な更新プログラムを確認
  2. 更新プログラムがあればダウンロードとインストール
  3. 再起動が必要であれば画面に通知

あとがき

「WindowsUpdateProvider」モジュールは、Windowsの更新を簡単にしてくれる便利なモジュールではありますが、次のような状況もあるため、常用するにはもう少し待ったほうが良いと思います。

  • ヘルプファイルが整備されていない
  • ネットの情報がすくない
  • 不明なエラーが出ることがあり、原因がわからない

もう少し完成度が高くなるまでは、Windows Update Agent APIを使用するほうが良いかもしれません。