社内SEの話

日々起きたことの記録用

【PowerShell】Windows Updateを自動化

↓プログラミングで副業を考えたらこちら↓

PowershellでUpdateを制御

普段何気なくWindowsの更新を実行していますが、Powershellから更新を開始できます。

これによりリモート上から簡単にできたり、メンテナンスバッチの一部にWindows更新を組み込めます。

初回モジュールのインストール

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

install-Module -Name PSWindowsUpdate -Force

Windows Update

Get-WindowsUpdate

Install-WindowsUpdate -AcceptAll

コマンドの解説

NuGetプロバイダーが必要

install-Module -Name PSWindowsUpdate -Forceを実行した際に発生するエラーです。

続行するには NuGet プロバイダーが必要です

PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet プロバイダーが必要です。NuGet プロバイダーは
'C:\Program Files\PackageManagement\ProviderAssemblies'
または'C:\Users\user\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。今すぐPowerShellGet で NuGet プロバイダーをインストールしてインポートしますか?

[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は"Y"):

そのためNugetプロバイダーをインストールするために下記のコマンドを実行します

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

PSWindowsUpdate

www.powershellgallery.com

このモジュールをインストールすれば使用できるようになります。

Powershell Galleryでも一番使われているモジュールです。

Get-WindowsUpdate

このコマンドで更新するモジュールを取得するプロセスになります。

Install-WindowsUpdate

Install-WindowsUpdate -AcceptAll

実行中

更新終了

再起動が必要なようですが、デフォルトではNなので強制的に再起動はしないようです。

自動再起動させたい

再起動してもいい場合は下記の引数を追加したコマンドにしてください。

Install-WindowsUpdate -AcceptAll -AutoReboot

自動再起動のオプションしか無いので、終了後にシャットダウンさせたい場合はこんな感じになります

Install-WindowsUpdate -AcceptAll;Stop-Computer -Force

ポリシーエラーが発生する場合

Get-WindowsUpdate

Get-WindowsUpdate : 'Get-WindowsUpdate' コマンドはモジュール'PSWindowsUpdate' で見つかりましたが、このモジュールを読み込むことができませんでした。詳細については、'Import-Module PSWindowsUpdate' を実行してください。

発生場所 行:1 文字:1

+ Get-WindowsUpdate

+ ~~~~~~~~~~~~~~~~~

+ CategoryInfo : ObjectNotFound: (Get-WindowsUpdate:String)
[],CommandNotFoundException

+ FullyQualifiedErrorId : CouldNotAutoloadMatchingModule

Import-Module PSWindowsUpdate

Import-Module :
このシステムではスクリプトの実行が無効になっているため、ファイル
C:\Program Files\WindowsPowerShell\Modules\PSWindowsUpdate\2.2.0.3\PSWindowsUpdate.psm1を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。

発生場所 行:1 文字:1

+ Import-Module PSWindowsUpdate

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : セキュリティ エラー: (: )
[Import-Module]、PSSecurityException

+ FullyQualifiedErrorId :
UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

learn.microsoft.com

いずれも権限の問題から発生するエラーなので、

Set-ExecutionPolicy RemoteSigned

を実行してポリシー変更をします。

ポリシー変更は適切な状態にしないとセキュリティの問題が発生するため注意してください。