Windows Updateをコマンドで実行する手順と注意点【Windows 10/11】:Tech TIPS
更新プログラムを自動適用してくれる「Windows Update」は便利な半面、意図しないタイミングで更新プログラムが適用され、再起動が要求されることがあるなど、用途によっては望ましくないこともある。そこで、コマンドを使ってWindows Updateを実行する方法を紹介しよう。タスクスケジューラと組み合わせることで、週末や夜間などに更新プログラムが適用できるようになる。
対象:Windows 10/11
コマンドでWindows Updateを実行する
コマンドを使ってWindows Updateを実行する方法を紹介しよう。コマンドで実行できるようになると、タスクスケジューラと組み合わせて、週末や夜間などに更新プログラムが適用できるようになる。
「Windows Update」は、更新プログラムが提供されると自動的に適用して、セキュリティを高めてくれる便利な機能だ。しかし、意図しないタイミングで更新プログラムが適用され、再起動が要求されることがあるなど、用途によっては望ましくないこともある。
「Windowsの設定(Windows 10の場合)」アプリや「設定(Windows 11の場合)」アプリの[Windows Update]画面を開き、手動で更新プログラムを適用することもできるが、毎週のように確認するのは面倒だろう。
そこで、本Tech TIPSではPowerShellのコマンドレットを使って、Windows Updateを実行する方法を紹介しよう。
wuaucltコマンドやUsoClientコマンドでは更新プログラムの適用はできない
以前の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のコマンドレットを使って更新プログラムを適用する
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のコンソールを開く。
Windowsターミナルを管理者で起動する(1)
[スタート]ボタンを右クリックして、[ターミナル(管理者)]を選択する。Windows 10の場合は、[スタート]メニューの[Windows PowerShell]−[Windows PowerShell]を右クリックして、[管理者として実行する]を選択すればよい。
Windowsターミナルを管理者で起動する(2)
管理者でWindowsターミナルが起動する。「既定のプロファイル」をコマンドプロンプトなどにしている場合は、[v]アイコンをクリックして、[Windows PowerShell]を選択して、新しいタブでPowerShellを開く。
初回のみ実行するコマンドレット
PSWindowsUpdateをPowerShellで使うには、パッケージのインストールが必要になる。以下のコマンドレットを実行すればよい。
Install-Module PSWindowsUpdate -Force
ただ、NuGetプロバイダーがインストールされていない場合、「NuGetプロバイダーが必要です」というメッセージが表示され、「NuGetプロバイダーをインストールしてインポートしますか?」と聞かれるので、[Y]キーを押して、NuGetプロバイダーをインストールする。
PSWindowsUpdateをインストールする
NuGetがインストールされていないと、画面のようにNuGetのインストールが求められるので、[Y]キーを押してNuGetもインストールする。NuGetのインストール後、自動的にPSWindowsUpdateがインストールされる。
スクリプトファイルなどにして実行する場合は、以下のようにNuGetを事前にインストールしておけば、インタラクティブな操作の必要なく、PSWindowsUpdateのインストールができる。
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module PSWindowsUpdate -Force
PSWindowsUpdateやPowerShellのスクリプトファイル(.ps1ファイル)を利用するには、PowerShell実行ポリシーを以下のコマンドレットで変更し、スクリプトの実行を可能にしておく必要がある。
Set-ExecutionPolicy RemoteSigned
これで準備は完了だ。
コマンドレットでWindows Updateを実行する
管理者権限でPowerShellのコンソールを起動し、以下のコマンドレットを実行すると、PSWindowsUpdateを使った更新プログラムの適用ができる。
Install-WindowsUpdate -AcceptAll
PSWindowsUpdateで更新プログラムを適用する
「Install-WindowsUpdate -AcceptAll」コマンドレットを実行すると、更新プログラムがダウンロードされ、インストールが実行される。適用過程は、画面のように表示される。
上記のコマンドレットでは、更新プログラムを適用後、再起動待ちの状態となる。多くの場合、更新プログラムの適用を終了するには再起動が必要になる。更新プログラムの適用後、自動的に再起動を実行したい場合には、「-AutoReboot」オプションを付けて、以下のコマンドレットを実行すればよい。
Install-WindowsUpdate -AcceptAll -AutoReboot
上記のコマンドレットをPowerShellのスクリプトファイル(.ps1)に書いて、タスクスケジューラで定期的に実行するように設定すれば、Windows Updateの自動化が実現できるだろう(タスク起動後、たいていは自動的にシステムが再起動するので要注意)。
コマンドレットで適用可能な更新プログラムを確認する
事前に適用可能な更新プログラムがあるかどうかを確認したい場合は、以下のコマンドレットを実行すればよい。
Get-WindowsUpdate
Get-WindowsUpdateコマンドレットで適用可能な更新プログラムの一覧を取得する
Get-WindowsUpdateコマンドレットを実行すると、適用可能な更新プログラムの一覧が取得できる。サイズ(Size)などを確認して、適用に時間がかかりそうならば、後でInstall-WindowsUpdateコマンドレットを実行するといった判断もできる。「Status」欄の「D」はダウンロード済みを示している。
[Windows Update]画面の「更新の一時停止」に注意
「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ファイルを実行させる際の注意
タスクスケジューラで.ps1ファイルを実行させたい場合、「プログラム」欄に「PowerShell」と入力し、「引数の追加」に.ps1ファイルをパスも含めて指定する。
タスクスケジューラで「.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.