【完全ガイド】PSWindowsUpdate PowerShellモジュールでWindows Updateを効率的に管理する方法
PSWindowsUpdate PowerShellモジュールを使うと、コマンドラインからWindows Updateを一元的に管理できます。このモジュールはWindowsに標準搭載されておらず、PowerShell Galleryリポジトリからインストールする必要があります。PSWindowsUpdateを利用すれば、管理者はWindowsサーバーやワークステーションに対して、リモートでの更新プログラムの確認、インストール、削除、非表示設定などを行えます。
特にGUIを持たないWindows Server CoreやHyper-V Serverの更新管理、また監査モードでのWindowsイメージ構成時に、このモジュールは非常に役立ちます。
PSWindowsUpdateモジュールのインストール
Windows 10/11およびWindows Server 2022/2019/2016では、PackageManagementを使ってオンラインリポジトリ(PSGallery)から次の1コマンドでインストールできます。
Install-Module -Name PSWindowsUpdate -Force
インストール完了後、パッケージを確認しましょう。
Get-Package -Name PSWindowsUpdate
古いバージョンのWindows 2012 R2/Windows 8.1以前にモジュールをインストールする際、次のようなエラーが表示されることがあります。
Install-Module: Unable to download from URI.Unable to download the list of available providers. Check your internet connection.
この場合、接続にTLS 1.2プロトコルを使用する必要があります。現在のPowerShellセッションで以下のコマンドを実行して有効化してください。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
さらに古いWindowsバージョン(Windows 7/8.1/Windows Server 2008 R2/2012 R2)を使用している場合や、直接インターネットにアクセスできない環境では、PSWindowsUpdateを手動でインストールできます(オフラインでのPowerShellモジュールインストール手順を参照してください)。
- インターネットに接続できる任意のPCでモジュールをダウンロードします:
Save-Module –Name PSWindowsUpdate –Path C:\ps\ - モジュールを対象コンピューターの次のフォルダーにコピーします:
%WINDIR%\System32\WindowsPowerShell\v1.0\Modules - PowerShellスクリプトの実行ポリシーを設定します:
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force - これでPowerShellセッションにモジュールをインポートできます:
Import-Module PSWindowsUpdate
注意: Windows 7/Windows Server 2008 R2でPSWindowsUpdateモジュールをインポートすると、「The term “Unblock-File” is not recognized as the name of a cmdlet」というエラーが表示される場合があります。これはモジュールがPowerShell 3.0以降で追加された関数を使用しているためです。この問題を解決するには、PowerShellのバージョンをアップデートするか、PSWindowsUpdate.psm1ファイルから| Unblock-Fileの行を手動で削除してください。
コンピューターにPSWindowsUpdateモジュールをインストールした後、Update-WUModuleコマンドレットを使って他のコンピューターやサーバーにリモートインストールできます。例えば、自分のコンピューターから2台のリモートホストへモジュールをコピーするには、次のコマンドを実行します(WinRMプロトコル経由でリモートサーバーにアクセスできる必要があります)。
$Targets = "lon-fs02", "lon-db01"
Update-WUModule -ComputerName $Targets –Local
PoShモジュールを共有ネットワークフォルダーに保存(エクスポート)して、後で他のコンピューターにインポートすることも可能です。
Save-Module -Name PSWindowsUpdate –Path \\lon-fs02\psmodules\
PSWindowsUpdateのコマンドレット一覧
PSWindowsUpdateモジュールで利用可能なコマンドレットの一覧は、次のコマンドで表示できます。
get-command -module PSWindowsUpdate
主なコマンドの用途を簡単に説明します。
- Clear-WUJob – タスクスケジューラからWUJobをクリアします(Get-WUJobと併用)。
- Download-WindowsUpdate(
Get-WindowsUpdate –Downloadのエイリアス)— 更新プログラムの一覧を取得してダウンロードします。 - Get-WUInstall / Install-WindowsUpdate(
Get-WindowsUpdate –Installのエイリアス)– Windows更新プログラムをインストールします。 - Hide-WindowsUpdate – 特定の更新プログラムを非表示にします。
- Uninstall-WindowsUpdate – Remove-WindowsUpdateを使って更新プログラムを削除します。
- Add-WUServiceManager – コンピューターに更新サーバー(Windows Update Service Manager)を登録します。
- Enable-WURemoting — PSWindowsUpdateコマンドレットのリモート使用を許可するWindows Defenderファイアウォール規則を有効化します。
- Get-WindowsUpdate(Get-WUList)— 指定した条件に一致する更新プログラムの一覧を表示し、検索・インストールを可能にします。PSWindowsUpdateモジュールの中核となるコマンドレットです。WSUSサーバーやMicrosoft Updateからのダウンロードとインストールに対応し、更新カテゴリや特定の更新プログラムの選択、インストール時の再起動ルールの設定もできます。
- Get-WUApiVersion – コンピューターのWindows Updateエージェントのバージョンを取得します。
- Get-WUHistory – インストール済み更新プログラムの一覧(更新履歴)を表示します。
- Get-WUInstallerStatus — Windows Installerサービスの状態を確認します。
- Get-WUJob – タスクスケジューラ内のWUJob更新タスクを確認します。
- Get-WULastResults — 最終検索日時と最終インストール日時(LastSearchSuccessDate および LastInstallationSuccessDate)を取得します。
- Get-WURebootStatus — 特定の更新プログラムの適用に再起動が必要かどうかを確認できます。
- Get-WUServiceManager – 更新ソースの一覧を表示します。
- Get-WUSettings – Windows Updateクライアントの設定を取得します。
- Invoke-WUJob – タスクスケジューラでWUJobsタスクをリモート呼び出しし、PSWindowsUpdateコマンドを即座に実行します。
- Remove-WindowsUpdate – KB番号を指定して更新プログラムをアンインストールできます。
- Remove-WUServiceManager – Windows Update Service Managerを無効化します。
- Set-PSWUSettings – PSWindowsUpdateモジュールの設定をXMLファイルに保存します。
- Set-WUSettings – Windows Updateクライアントの設定を構成します。
- Update-WUModule – PSWindowsUpdateモジュールを更新します(現在のコンピューターからコピーするか、PSGalleryから更新できます)。
- Reset-WUComponents – コンピューターのWindows Updateエージェントを初期状態にリセットできます。
現在のWindows Updateクライアント設定を確認するには、次のコマンドを実行します。
Get-WUSettings
ComputerName : WKS5S2N39S2 WUServer : https://MN-WSUS:8530 WUStatusServer : https://MN-WSUS:8530 AcceptTrustedPublisherCerts : 1 ElevateNonAdmins : 1 DoNotConnectToWindowsUpdateInternetLocations : 1 TargetGroupEnabled : 1 TargetGroup : ServersProd NoAutoUpdate : 0 AUOptions : 3 - Notify before installation ScheduledInstallDay : 0 - Every Day ScheduledInstallTime : 3 UseWUServer : 1 AutoInstallMinorUpdates : 0 AlwaysAutoRebootAtScheduledTime : 0 DetectionFrequencyEnabled : 1 DetectionFrequency : 4
この例では、コンピューターのWindows UpdateエージェントがGPOによって構成され、ローカルのWSUSサーバーから更新プログラムを受信するようになっています。
Reset-WUComponents -Verboseコマンドレットを使うと、Windows Updateエージェントの全設定をリセットし、ライブラリを再登録して、wususervサービスを初期状態に戻すことができます。
PowerShellでWindows Updateをスキャン・ダウンロードする
Get-WindowsUpdateまたはGet-WUListコマンドを使用すると、現在のコンピューター向けに更新サーバー上で利用可能な更新プログラムの一覧を表示できます。
リモートコンピューターの利用可能な更新プログラム一覧を確認するには、次のコマンドを実行します。
Get-WUList –ComputerName server2
Windowsがどこから更新プログラムを受信するように設定されているかを確認できます。
Get-WUServiceManager
ServiceID IsManaged IsDefault Name --------- --------- --------- ---- 8b24b027-1dee-babb-9a95-3517dfb9c552 False False DCat Flighting Prod 855e8a7c-ecb4-4ca3-b045-1dfa50104289 False False Windows Store (DCat Prod) 3da21691-e39d-4da6-8a4b-b43877bcb1b7 True True Windows Server Update Service 9482f4b4-e343-43b6-b170-9a65bc822c77 False False Windows Update
ご覧のとおり、このコンピューターはローカルWSUSサーバーから更新を受信するよう構成されています(Windows Server Update Service = True)。この場合、そのコンピューターに承認された更新プログラムの一覧が表示されます。
Microsoft Updateサーバー(Windows更新プログラムに加えてOfficeなど他のMicrosoft製品の更新も含まれます)に対してスキャンしたい場合は、次のコマンドを実行します。
Get-WUlist -MicrosoftUpdate
次のような警告が表示されます。
Get-WUlist : Service Windows Update was not found on computer. Use Get-WUServiceManager to get registered service.
Microsoft Updateでのスキャンを許可するには、次のコマンドを実行します。
Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7
これでMicrosoft Updateに対してスキャンできるようになります。この例では、Microsoft Visual C++ 2008およびMicrosoft Silverlightの追加更新プログラムが見つかりました。
コンピューターのWindows Updateエージェントのバージョンを確認するには、次のコマンドを実行します。
Get-WUApiVersion
ComputerName PSWindowsUpdate PSWUModuleDll ApiVersion WuapiDllVersion ------------ --------------- ------------- ---------- --------------- DESKTOP-J... 2.1.1.2 2.2.0.2 8.0 10.0.19041.1320
コンピューターが受信する更新プログラムの一覧から、特定の製品やKBを除外することもできます。除外条件は次のとおりです。
- カテゴリ(
-NotCategory) - タイトル(
-NotTitle) - 更新番号(
-NotKBArticleID)
例えば、OneDrive、ドライバー更新、特定のKBを一覧から除外するには次のようにします。
Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873
PowerShellでWindows Updateをインストールする(Install-WindowsUpdate)
ローカルWSUSではなくWindows Updateサーバーから、Windowsデバイス向けの利用可能なすべての更新プログラムを自動的にダウンロード・インストールするには、次のコマンドを実行します。
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot
AcceptAllパラメーターはすべての更新パッケージのインストールを承認し、AutoRebootは更新プログラムのインストール後にWindowsを自動的に再起動させます。
その他にも以下のオプションがあります。
- IgnoreReboot – 自動再起動を無効にします。
- ScheduleReboot – コンピューターの再起動時刻を正確に指定します。
更新プログラムのインストール履歴をログファイルに保存することもできます(WindowsUpdate.logファイルの代わりとして利用可能)。
Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "c:\logs\$(get-date -f yyyy-MM-dd)-WindowsUpdate.log" -force
KB番号を指定して、特定の更新パッケージのみをインストールすることもできます。
Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install
この場合、各更新プログラムのインストールについて手動で確認を求められます。
特定の更新プログラムをインストール一覧から除外したい場合は、次のコマンドを実行します。
Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot
PowerShellでリモートコンピューターにWindows Updateをインストールする
PSWindowsUpdateモジュールを使えば、複数のワークステーションやサーバーに対して一度に更新プログラムをリモートインストールできます(対象コンピューターにはPSWindowsUpdateがインストール/インポートされている必要があります)。管理者がリモートのWindowsホストに手動でログオンして更新作業を行う必要がないため、非常に便利です。リモートコンピューターではWinRMが有効化・構成されている必要があります(手動またはGPO経由)。
PSWindowsUpdateモジュールのほぼすべてのコマンドレットは、–Computername属性を使ってリモートコンピューターのWindows更新を管理・インストールできます。
リモートコンピューターにPSWindowsUpdateモジュールをインストールし、Windows Defenderファイアウォールでdllhost.exeプロセスへの動的RPCポートアクセスを許可してください。Invoke-Commandコマンドレットを使ってリモートコンピューター上のPSWindowsUpdateモジュールを構成できます。
$Targets = "lon-fs02", "lon-db01"
Invoke-Command -ComputerName $Target -ScriptBlock {Set-ExecutionPolicy RemoteSigned -force }
Invoke-Command -ComputerName $Target -ScriptBlock {Import-Module PSWindowsUpdate; Enable-WURemoting}
PSWindowsUpdateモジュールは、ADドメイン内のコンピューターでもワークグループ環境のコンピューターでも使用できます(ワークグループ環境ではPowerShell Remotingの構成が必要です)。
リモートコンピューターの更新を管理するには、ホスト名をwinrmのTrustedHostsリストに追加するか、HTTPS経由でPowerShell Remoting(WinRM)を構成する必要があります。
winrm set winrm/config/client '@{TrustedHosts="server1,server2,…"}'
PowerShellの場合は次のようにします。
Set-Item wsman:\localhost\client\TrustedHosts -Value server1 -Force
次のコマンドで、3台のリモートWindowsホストに利用可能なすべての更新プログラムをインストールできます。
$ServerNames = "server1, server2, server3"
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false -Verbose -ErrorAction Ignore
Invoke-WUJobコマンドレット(旧称:Invoke-WUInstall)は、ローカルSYSTEMアカウントで実行されるスケジューラタスクをリモートコンピューター上に作成します。
Windows更新プログラムのインストール時刻を正確に指定することもできます。
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate –AcceptAll -AutoReboot | Out-File C:\Windows\PSWindowsUpdate.log } -Confirm:$false -TriggerDate (Get-Date -Hour 22 -Minute 0 -Second 0)
Get-WUJobを使って更新インストールタスクの状態を確認できます。
Get-WUJob -ComputerName $ServerNames
このコマンドが空のリストを返せば、すべてのコンピューターでの更新インストールタスクが完了しています。
リモートコンピューターに更新をインストールし、管理者へメールレポートを送信することも可能です。
Install-WindowsUpdate -ComputerName nysrv1 -MicrosoftUpdate -AcceptAll - IgnoreReboot -SendReport –PSWUSettings @{SmtpServer="smtp.woshub.com";From="update_alert@woshub.com";To="wsus_admin@woshub.com";Port=25} -Verbose
PowerShellでWindows Update履歴を確認する(Get-WUHistory)
Get-WUHistoryコマンドレットを使うと、過去に自動または手動でインストールされた更新プログラムの一覧を取得できます。
特定の更新プログラムのインストール日に関する情報を取得するには、次のようにします。
Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft
複数のリモートコンピューターに特定の更新プログラムがインストールされているかどうかを調べるには、次のPowerShellコードを使用します。
"server1","server2" | Get-WUHistory| Where-Object {$_.Title -match "KB4011634"} | Select-Object *|ft
更新プログラムのインストール後にコンピューターの再起動が必要か(保留中の再起動)を確認します。
Get-WURebootStatus –ComputerName WKS21TJS
RebootRequiredおよびRebootScheduled属性の値を確認してください。
Get-ADComputerコマンドレット(Active Directory for PowerShellモジュール)を使うと、ドメイン内のすべてのコンピューターで更新プログラムが最後にインストールされた日付のレポートを生成できます。
$Computers=Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows*' }
Foreach ($Computer in $Computers)
{
Get-WULastResults -ComputerName $Computer.Name|select ComputerName, LastSearchSuccessDate, LastInstallationSuccessDate
}
同様の方法で、60日以上更新プログラムをインストールしていないコンピューターを検索し、結果をOut-GridViewの対話型テーブルで表示できます。
$result=@()
Foreach ($Computer in $Computers) {
$result+= Get-WULastResults -ComputerName $Computer.Name
}
$result| Where-Object { $_.LastInstallationSuccessDate -lt ((Get-Date).AddDays(-60)) }| Out-GridView
PowerShellでWindows Updateをアンインストールする(Remove-WindowsUpdate)
Remove-WindowsUpdateコマンドレットを使うと、PowerShellで更新プログラムを正しくアンインストールできます。KBArticleIDパラメーターの引数としてKB番号を指定するだけです。自動再起動を遅らせる場合は、–NoRestartオプションを追加します。
Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart
PowerShellでWindows Updateを非表示にする方法
特定の更新プログラムを非表示にすると、Windows Updateサービスがそのコンピューターに二度とインストールしなくなります(多くの場合、ドライバー更新プログラムを非表示にしたいケースが多いでしょう)。例えば、KB4489873とKB4489243の更新プログラムを非表示にするには、次のコマンドを実行します。
$HideList = "KB4489873", "KB4489243"
Get-WindowsUpdate -KBArticleID $HideList –Hide
以降、Get-WUlistコマンドで更新プログラムをスキャンしても、非表示にした更新プログラムはインストール可能な一覧に表示されなくなります。
このコンピューターで非表示になっている更新プログラムの一覧は、次のコマンドで表示できます。
Get-WindowsUpdate –IsHidden
非表示の更新プログラムのStatus列に「H」(Hidden)属性が表示されていることに注目してください。
非表示にした更新プログラムを再度表示するには、次のコマンドを実行します。
Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false
または、次のコマンドでも同様の操作が可能です。
Show-WindowsUpdate -KBArticleID $HideList
PowerShellコンソールの操作に不安がある方には、Windows 10/11およびWindows Server 2022/2019の更新管理に対応したグラフィカルツールWindows Update MiniToolをおすすめします。
-
Windows PowerShellで生産性を向上させる|基本機能から学習方法まで徹底解説
もし、Linuxならではの高い生産性をWindows上でも実現できたら――そう考えたことはありませんか? WindowsとLinuxの大きな違いの一つは、多くのLinuxディストリビューションが強力な「Bash」シェルを標準搭載している点にあります。一方、従来のWindowsコマンドプロンプトは機能が最小限にとどまっており、本格的な作業には物足りなさを感じる人も少なくありませんでした。 しかし、PowerShellを使えば、その悩みは一変します。 補足:PowerShellはいわゆる「Windows版Bash」ではありません。どちらもコマンドライン環境であり、作業効率を大きく高められるという共
-
Windowsのタグ機能でファイルとフォルダを効率よく管理する方法
古いファイルを探すのは、まるで石炭庫の中で黒猫を探すようなもの。「去年の南米旅行の写真、どこに保存したっけ?」「2018年に書いたあのレポート、ファイル名は何だったかな?」——そんな経験はありませんか。 Windows 10には強力な検索機能が標準搭載されており、Cortanaを活用すれば画像、音楽、PDFなどのフィルターを使ってスマートに検索できます。しかし、意外と見過ごされがちな機能の一つがWindowsタグです。この機能を使えば、ファイルをより効率的に検索・整理できるようになります。 Windowsタグとは?使うべき理由 タグは、Windows 10において最も過小評価されている機能の