更新プログラムを自動適用してくれる「Windows Update」は便利な半面、意図しないタイミングで更新プログラムが適用され、再起動が要求されることがあるなど、用途によっては望ましくないこともある。そこで、コマンドを使ってWindows Updateを実行する方法を紹介しよう。タスクスケジューラと組み合わせることで、週末や夜間などに更新プログラムが適用できるようになる。
対象:Windows 10/11
「Windows Update」は、更新プログラムが提供されると自動的に適用して、セキュリティを高めてくれる便利な機能だ。しかし、意図しないタイミングで更新プログラムが適用され、再起動が要求されることがあるなど、用途によっては望ましくないこともある。
「Windowsの設定(Windows 10の場合)」アプリや「設定(Windows 11の場合)」アプリの[Windows Update]画面を開き、手動で更新プログラムを適用することもできるが、毎週のように確認するのは面倒だろう。
そこで、本Tech TIPSではPowerShellのコマンドレットを使って、Windows Updateを実行する方法を紹介しよう。
以前のWindows OSでは、「wuauclt」コマンドや「UsoClient」コマンドを使って、Windows Updateが可能であったので、インターネットで検索すると、これらのコマンドを使う方法が数多くヒットする(ChatGPTやWindows Copilotでも、これらのコマンドを利用する方法が紹介される)。
しかし、Windows 10 2022 Update(バージョン22H2)やWindows 11では、これらのコマンドは存在する(実行できる)ものの、実際には機能していないので注意してほしい。編集部で試した限り、コマンドを実行しても更新プログラムは適用されず、Windows Updateの履歴にも変化がなかった。
現行のWindows 10/11で、コマンドを使ってWindows Updateを実行するには、PowerShellのコマンドレットを使うしかないようだ。
PowerShellのコマンドレットを使ってWindows Updateを実行するには、Windows Update Agent APIを呼び出せばよい(VBScriptでも呼び出し可能)。Windows Update Agent APIについては、Microsoft Learn「Windows UpdateエージェントAPI」を、Windows Update Agent APIを使う方法は、Microsoft Learn「Searching, Downloading, and Installing Updates」を参照してほしい。
ただ、Windows Update Agent APIを使う方法はかなり複雑で面倒だ。
実は、PowerShell Gallery「PSWindowsUpdate 2.2.1.4」で配布されている「PSWindowsUpdate」を使うことで、簡単にWindows UpdateがPowerShellで実行できるようになる。そこで本Tech TIPSでは、この「PSWindowsUpdate」を使う方法で手順を紹介する。
PSWindowsUpdateは、MITライセンスで配布されており、商用利用なども可能だ。またソースコードはGitHubでも公開されており、GitHub「mgajda83/PSWindowsUpdate」で簡単なマニュアルなどが参照できる。
PSWindowsUpdateを使うには、初回のみPSWindowsUpdateのインストールが必要になる。2回目以降は、Windows Updateを実行して、更新プログラムをインストールするコマンドレットだけでよい。
以降の操作を実行するには、[スタート]メニューやクイックリンクメニュー([スタート]ボタンの右クリックメニュー)で「ターミナル(管理者)」を選択して、管理者権限でWindowsターミナルを起動し、PowerShellのコンソールを開く。
PSWindowsUpdateをPowerShellで使うには、パッケージのインストールが必要になる。以下のコマンドレットを実行すればよい。
Install-Module PSWindowsUpdate -Force
ただ、NuGetプロバイダーがインストールされていない場合、「NuGetプロバイダーが必要です」というメッセージが表示され、「NuGetプロバイダーをインストールしてインポートしますか?」と聞かれるので、[Y]キーを押して、NuGetプロバイダーをインストールする。
スクリプトファイルなどにして実行する場合は、以下のようにNuGetを事前にインストールしておけば、インタラクティブな操作の必要なく、PSWindowsUpdateのインストールができる。
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module PSWindowsUpdate -Force
PSWindowsUpdateやPowerShellのスクリプトファイル(.ps1ファイル)を利用するには、PowerShell実行ポリシーを以下のコマンドレットで変更し、スクリプトの実行を可能にしておく必要がある。
Set-ExecutionPolicy RemoteSigned
これで準備は完了だ。
管理者権限でPowerShellのコンソールを起動し、以下のコマンドレットを実行すると、PSWindowsUpdateを使った更新プログラムの適用ができる。
Install-WindowsUpdate -AcceptAll
上記のコマンドレットでは、更新プログラムを適用後、再起動待ちの状態となる。多くの場合、更新プログラムの適用を終了するには再起動が必要になる。更新プログラムの適用後、自動的に再起動を実行したい場合には、「-AutoReboot」オプションを付けて、以下のコマンドレットを実行すればよい。
Install-WindowsUpdate -AcceptAll -AutoReboot
上記のコマンドレットをPowerShellのスクリプトファイル(.ps1)に書いて、タスクスケジューラで定期的に実行するように設定すれば、Windows Updateの自動化が実現できるだろう(タスク起動後、たいていは自動的にシステムが再起動するので要注意)。
事前に適用可能な更新プログラムがあるかどうかを確認したい場合は、以下のコマンドレットを実行すればよい。
Get-WindowsUpdate
「Windowsの設定(Windows 10の場合)」アプリや「設定(Windows 11の場合)」アプリの[Windows Update]画面で「更新の一時停止」を有効にしていると、Install-WindowsUpdateコマンドレットやGet-WindowsUpdateコマンドレットによる更新プログラムの適用や確認ができないので注意してほしい。
「更新の一時停止」を使って更新プログラムの適用を延期している場合は、[更新の再開]ボタンをクリックして、Windows Updateが働いている状態にして、Install-WindowsUpdateコマンドレットなどを実行すること。
上記のコマンドレットをタスクスケジューラに登録して、特定の曜日の夜間に定期実行したいこともあるだろう。この場合、上記のコマンドレットを記載したテキストファイルを、「.ps1」という拡張子で保存し、PowerShellのスクリプトファイルにすればよい。
このスクリプトファイルをタスクスケジューラの[操作の編集]ダイアログで実行するように設定すればよい。ただし、「.ps1」ファイルを「プログラム/スクリプト」の入力ボックスに直接指定すると、スクリプトは実行されずにps1ファイルが「メモ帳」アプリで開かれてしまうので注意してほしい。
ps1ファイルを実行したいのであれば、「プログラム/スクリプト」の入力ボックスに「powershell」と入力し、ps1ファイルを「引数の追加」に入力する。
Install-WindowsUpdateコマンドレットの実行には管理者権限が必要だ。そのため、タスクスケジューラの対象タスクのプロパティを開き、[全般]タブにある[ユーザーまたはグループの変更]ボタンをクリックして管理者アカウントを指定しつつ、[最上位の特権で実行する]にチェックを入れるのを忘れないようにする必要がある。
サインアウトしていてもタスクを実行する場合には、プロパティの[全般]タブにある[ユーザーがログオンしているかどうかにかかわらず実行する]を選択する。
タスクスケジューラで「.ps1」ファイルを実行する際の注意は、Tech TIPS「【Windows 10トラブル対策】タスクスケジューラでタスクが実行されない」を参照してほしい(このTech TIPSではWindows 10を対象としているが、Windows 11でも同様である)。
また、Tech TIPS「【Windows 10対応】タスクスケジューラで定期的な作業を自動化する」「【Windows 10/11】シャットダウンをタイマーで自動的に実行するには」も参考になるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.