コマンドラインからWindows Updateを管理したい場合は、PSWindowsUpdate PowerShellモジュールが非常に便利です。GUIを操作せずに、更新プログラムのスキャン、ダウンロード、インストール、さらには非表示や削除まで行えます。スクリプト駆動型のアプローチが必要な場合、Windows Serverを扱っている場合、またはリモートで作業している場合に特に役立ちます。
- PSWindowsUpdateモジュールのインストール
- PowerShell で Windows 更新プログラムをスキャンしてダウンロードする
- PowerShell で Windows Update をインストールする
- PowerShell を使用して Windows Update 履歴を確認する
- PowerShell で Windows Update をアンインストールする
- PowerShell を使用して Windows Update を非表示または表示する方法
- PowerShell を使用してリモート コンピューターに Windows 更新プログラムをインストールする
PSWindowsUpdateモジュールのインストール
すべてはPowerShellギャラリーからモジュールをインストールすることから始まります。管理者のPowerShellウィンドウで次のコマンドを実行します。
Install-Module -Name PSWindowsUpdate -Force
リポジトリを信頼するかどうかの確認メッセージが表示される場合がありますが、Yと入力してEnterキーを押してください。その後、次のコマンドを実行して、リポジトリがインストールされているかどうかを確認してください。
Get-Package -Name PSWindowsUpdate
厳重にロックダウンされた PC またはサーバーを使用している場合は、まず実行ポリシーを微調整する必要があるかもしれません。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force
場合によっては、特に古いバージョンのWindowsやオフライン環境で作業している場合は、モジュールを手動でダウンロードしたり、ファイルを転送したりする必要があるかもしれません。しかし、ほとんどの場合、それは必要ありません。インストールが完了したら、セッションにインポートできます。
Import-Module PSWindowsUpdate
適切なコマンドが使用可能であることを確認します。
Get-Command -Module PSWindowsUpdate
PowerShell で Windows 更新プログラムをスキャンしてダウンロードする
必要な更新を確認するには、次のコマンドを実行します。
Get-WindowsUpdate
または別名:
Get-WUList
保留中の更新プログラムの一覧が表示されます。最初は「値が想定範囲内にありません」のようなエラーが表示される場合があります。原因は不明ですが、レジストリやコンポーネントに何らかの異常があると考えられます。Windows Updateコンポーネントをリセットすると問題が解決することがよくあります。以下のコマンドを実行してください。
Reset-WUComponents -Verbose
このコマンドはエージェントをリセットし、DLLを再登録し、WUServerサービスをデフォルト設定に復元します。これにより、基本的に更新システムが再起動されます。更新チェックにバグがある場合は、試してみる価値があります。
Windows Update がどこから取得されているか (Microsoft サーバーまたは WSUS サーバー) を確認するには、次の操作を試してください。
Get-WUServiceManager
ローカル WSUS サーバーを指すエントリが表示される場合 ( http://MN-WSUS:8530の例のように)、セットアップは Microsoft 直接ではなく内部更新用に構成されています。
また、Microsoft Update からの更新プログラム (Office、ドライバーなどを含む) を確認する場合は、そのサービスを明示的に追加する必要があります。
Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7
場合によっては、ドライバーや特定のKBなど、特定の更新カテゴリを無視したいことがあります。その場合は、次のコマンドを使用します。
Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873
まだインストールせずに利用可能なすべてのアップデートを取得しようとしている場合は、次のコマンドを実行します。
Get-WindowsUpdate -Download -AcceptAll
これはダウンロードはしますがインストールはしませんC:\Windows\SoftwareDistribution\Download。アップデートは に配信されます。インストールプロセスを確認したり、分散させたりしたい場合に便利です。
PowerShell で Windows Update をインストールする
アップデートをダウンロードしたら、またはすべてをシステムに投入したい場合は、次のコマンドでインストールを自動化します。
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot
これにより、利用可能なすべてのアップデートが開始され、ライセンス契約に同意し、必要に応じて再起動されます。再起動をスケジュールしたり、自動再起動を回避したりしたい場合は、他に「IgnoreReboot」や「ScheduleReboot」といったオプションがあり、特定の時間に再起動することも可能です。
また、実行した内容のログを保存することもできます。これは、トラブルシューティングや監査の目的に役立ちます。
Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "C:\Logs\Update-$(Get-Date -Format yyyy-MM-dd).txt"
最後に、特定の KB 更新のみをインストールする場合は、その ID を指定します。
Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install
また、特定の更新をスキップする必要がある場合は、-NotCategory、-NotTitle、または-NotKBArticleIDを含めます。
Install-WindowsUpdate -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot
Get-WURebootStatus再起動が保留中かスケジュールされているかを確認するために使用します。
Get-WURebootStatus | Select RebootRequired, RebootScheduled
PowerShell を使用して Windows Update 履歴を確認する
すでにインストールされているものを確認したい場合は、以下を使用してください。
Get-WUHistory
特定の KB がいつインストールされたかを確認するには、次のようにします。
Get-WUHistory | Where-Object {$_. Title -match "KB4517389"} | Format-Table
または、最後に成功したスキャンまたはインストールの時刻を確認します。
Get-WULastResults | Select-Object LastSearchSuccessDate, LastInstallationSuccessDate
PowerShell で Windows Update をアンインストールする
パッチが問題を引き起こしている場合は、KB 番号で削除できます。
Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart
ただし、注意してください。アンインストールは依存関係を混乱させることがありますが、問題のある更新を削除するには有効です。
PowerShell を使用して Windows 更新プログラムを非表示または表示する
更新を非表示にするには(スキップしたいドライバーの更新など)、次のコマンドを実行します。
$HideList = "KB4489873", "KB4489243" Get-WindowsUpdate -KBArticleID $HideList -Hide
非表示の更新を確認するには:
Get-WindowsUpdate -IsHidden
ステータスに「H」と表示されている非表示のアップデートが表示されます。非表示を解除したい場合は、以下を実行してください。
Get-WindowsUpdate -KBArticleID $HideList -Hidden -Hide:$false
PowerShell を使用してリモート コンピューターに Windows 更新プログラムをインストールする
複数のマシンをリモートで管理するには、WinRM を有効にして設定する必要があります(設定されていない場合は面倒な場合があります)。設定が完了したら、以下のコマンドを実行できます。
Invoke-Command -ComputerName "server1", "server2" -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force Import-Module PSWindowsUpdate Enable-WURemoting } Invoke-Command -ComputerName "server1", "server2" -ScriptBlock { Install-WindowsUpdate -AcceptAll -AutoReboot }
または、-TriggerDate を追加して、特定の時間に更新が行われるようにスケジュールを設定します。これは、勤務時間中にユーザーの作業を中断したくない場合に便利です。
リモート システムの更新ステータスを簡単に確認するには、次のコマンドを実行します。
Get-WUHistory -ComputerName "server1" | Where-Object {$_. Title -match "KB404"}
このモジュール全体により、特に多数の Windows サーバーや GUI のないコア セットアップを扱う場合に、一括管理の速度が大幅に向上します。
多くのユーザーから、これらのコマンドが初回実行時に正常に動作しないことがあるという報告があります。特に新規セットアップ時やポリシー変更後には顕著ですが、再度実行したりサーバーを再起動したりすると通常は正常に動作します。重要なのは、何かをインストールまたはアンインストールする前に、必ず現在の状態を確認することです。
まとめ
PowerShellでPSWindowsUpdateを使ってアップデートを管理するのは、必ずしもスムーズとは言えませんが、あれこれクリックするよりもずっと柔軟です。これらのコマンドがすぐに機能しない場合は、コンポーネントをリセットしてモジュールを再インポートすることで解決できる場合が多いです。ただし、一部のコマンドでは管理者権限と適切なリモート管理設定が必要になることに注意してください。
まとめ
- Install-ModuleでPSWindowsUpdateをインストールしました
- 更新プログラムをスキャンする: Get-WindowsUpdate / Get-WUList
- 更新プログラムをダウンロードする: Get-WindowsUpdate -Download
- 更新プログラムのインストール: Install-WindowsUpdate
- 履歴を確認する: Get-WUHistory
- 必要に応じてアップデートをアンインストールまたは非表示にする
- Invoke-Command と Enable-WURemoting を使用してリモート マシンの更新を管理する
最後に
正直なところ、これらのコマンドは完璧ではありません。理由もなくエラーが発生することもあります。しかし、パッチ適用の自動化やアップデートの問題のトラブルシューティングを一括で行う際には、非常に役立ちます。複数のWindowsホストを管理する場合は、ぜひ使いこなせるようにしておく価値があります。誰かの時間を節約したり、面倒な作業を回避したりできると嬉しいです。