天天看點

使用 PowerShell 子產品管理 Windows 更新

PSWindowsUpdate 允許管理者遠端檢查、安裝、删除和隐藏 Windows 伺服器和工作站上的更新。

使用PSWindowsUpdate PowerShell 子產品從指令行管理 Windows 更新。但是PSWindowsUpdate 子產品未内置在 Windows 中,但是windows可以從線上存儲庫 (PSGallery) 在 Windows 10/11 和 Windows Server 2022/2019/2016 上安裝 PSWindowsUpdate 子產品。

PSWindowsUpdate 子產品對于管理Windows Server Core或Hyper-V Server(沒有 GUI)上的更新以及在稽核模式下更加具有價值。對于想通過批量化安裝更新檔,也具有很高價值

線上安裝PSWindowsUpdate

從線上存儲庫 (PSGallery) 在 Windows 10/11 和 Windows Server 2022/2019/2016 上安裝 PSWindowsUpdate 子產品,指令:

Install-Module -Name PSWindowsUpdate -Force

安裝完成後,需要檢查包:

Get-Package -Name PSWindowsUpdate

離線安裝PSWindowsUpdate

在 Windows 2012R2/Windows 8.1 及更低版本的早期版本上安裝 PowerShell 子產品時,可以手動安裝 PSWindowsUpdate

将 PSWindowsUpdate 子產品下載下傳到任何線上計算機 Save-Module –Name PSWindowsUpdate –Path C:\ps\:

或者到已經安裝子產品的機器,打開該路徑:

%WINDIR%\System32\WindowsPowerShell\v1.0\Modules

使用 PowerShell 子產品管理 Windows 更新

将 pswindowsupdate 子產品複制到離線 windows 計算機

将子產品複制到離線的目标計算機上的以下檔案夾

%WINDIR%\System32\WindowsPowerShell\v1.0\Modules;

您可以使用Update-WUModule cmdlet 在其他計算機或伺服器上遠端安裝它。例如,要将 PSWindowsUpdate 子產品從您的計算機複制到兩個遠端主機,請運作以下指令(您需要通過 WinRM 協定通路遠端伺服器):

\

$Targets = "lon-fs02", "lon-db01"
Update-WUModule -ComputerName $Targets –Local
           

配置 PowerShell 腳本執行政策:

Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force

您現在可以将子產品導入您的 PowerShell 會話:Import-Module PSWindowsUpdate

子產品指令的用法

您可以在 PSWindowsUpdate 子產品中顯示可用 cmdlet 的清單,如下所示:

get-command -module PSWindowsUpdate

指令清單

Clear-WUJob – 使用 Get-WUJob 清除 Task Scheduler 中的 WUJob;
Download-WindowsUpdate(别名 Get-WindowsUpdate –Download)——擷取更新清單并下載下傳它們;
Get-WUInstall、Install-WindowsUpdate(别名Get-WindowsUpdate –Install)——安裝 Windows 更新;
Hide-WindowsUpdate(别名Get-WindowsUpdate -Hide:$false)——隐藏更新;
Uninstall-WindowsUpdate – 使用 Remove-WindowsUpdate 删除更新;
Add-WUServiceManager——在電腦上注冊更新伺服器(Windows Update Service Manager);
Enable-WURemoting —啟用 Windows Defender 防火牆規則以允許遠端使用 PSWindowsUpdate cmdlet;
Get-WindowsUpdate (Get-WUList) — 顯示符合指定條件的更新清單,允許您查找和安裝更新。這是 PSWindowsUpdate 子產品的主要 cmdlet。允許從 WSUS 伺服器或 Microsoft Update 下載下傳和安裝更新。允許您在安裝更新時選擇更新類别、特定更新并設定計算機重新開機規則;
Get-WUApiVersion – 擷取電腦上的 Windows Update Agent 版本;
Get-WUHistory – 顯示已安裝更新清單(更新曆史);
Get-WUInstallerStatus — 檢查 Windows Installer 服務狀态;
Get-WUJob – 檢查任務計劃程式中的 WUJob 更新任務;
Get-WULastResults — 上次搜尋和安裝更新的日期(LastSearchSuccessDate和LastInstallationSuccessDate);
Get-WURebootStatus — 允許您檢查是否需要重新啟動才能應用特定更新;
Get-WUServiceManager – 列出更新源;
Get-WUSettings – 擷取 Windows Update 用戶端設定;
Invoke-WUJob——遠端調用Task Scheduler中的WUJobs任務,立即執行PSWindowsUpdate指令;
Remove-WindowsUpdate – 允許通過 KB ID 解除安裝更新;
Remove-WUServiceManager – 禁用 Windows 更新服務管理器;
Set-PSWUSettings – 将 PSWindowsUpdate 子產品設定儲存到 XML 檔案;
Set-WUSettings – 配置 Windows Update 用戶端設定;
Update-WUModule – 更新 PSWindowsUpdate 子產品(您可以通過從目前子產品複制或從 PSGallery 更新來更新遠端計算機上的子產品);
Reset-WUComponents –允許您将計算機上的 Windows Update 代理重置為預設狀态。
           
使用 PowerShell 子產品管理 Windows 更新

使用PSWindowsUpdate更新更新檔後,在圖形化界面看不到更新??

使用該指令更新更新檔,圖形化界面不會更新更新檔已經安裝了,因為是用的不同途徑更新更新檔,底層調用的api不同。這個時候,為了讓圖形化界面可以顯示更新,需要執行下面的指令:

usoclient ScanInstallWait
UsoClient StartScan
           

一般我會在更新完更新檔執行一次,重新開機後在執行一次指令。基本會顯示最新狀态,如果還沒更新最新狀态,在重新開機一次,就肯定顯示是最新狀态。

使用例子

要檢查目前的 Windows Update 用戶端設定,請運作以下指令:

Get-WUSettings

使用 PowerShell 掃描和下載下傳 Windows 更新

Get-WindowsUpdate

您可以使用或

Get-WUList

指令 列出更新伺服器上目前計算機可用的更新。

要檢查遠端計算機上的可用更新清單,請運作以下指令:

Get-WUList –ComputerName server2

您可以檢查您的 Windows 應該從哪裡接收更新。運作以下指令:

Get-WUServiceManager

要從計算機收到的更新清單中删除特定産品或 KB,您可以通過以下方式排除它們:

類别(-NotCategory);

标題(-NotCategory);

更新編号 ( -NotKBArticleID)。

例如,讓我們從清單中排除 OneDrive、驅動程式更新和特定 KB:

Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873

要從 Windows 更新伺服器(而不是本地 WSUS)自動下載下傳并安裝适用于您的 Windows 裝置的所有可用更新,請運作以下指令:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

AcceptAll參數接受所有更新包的安裝,AutoReboot允許 Windows 在安裝更新後自動重新啟動。

您還可以使用以下選項:

IgnoreReboot – 禁用自動重新開機;

ScheduleReboot – 設定重新啟動計算機的确切時間。

隻能按 KB 編号安裝特定的更新包:

Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install

使用 PowerShell 子產品管理 Windows 更新

如果要從安裝清單中排除某些更新,請運作以下指令:

Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot

您可以使用 Get-WUJob 檢查更新安裝任務的狀态:

Get-WUJob -ComputerName $ServerNames

您可以擷取有關特定更新的安裝日期的資訊:

Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft

檢查 Windows 更新曆史記錄

Get-WUHistory

找到超過 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 更新 (Remove-WindowsUpdate)

您可以使用Remove-WindowsUpdate cmdlet 通過 PowerShell 正确解除安裝更新。隻需将 KB 編号指定為 KBArticleID 參數的參數即可。要延遲計算機自動重新開機,請添加 –NoRestart 選項:

Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart

如何使用 PowerShell 隐藏 Windows 更新?

您可以隐藏特定的更新,這樣它們就不會被計算機上的 Windows 更新服務安裝(通常您需要隐藏驅動程式更新)。例如,要隐藏 KB4489873 和 KB4489243 更新,請運作以下指令:

$HideList = "KB4489873", "KB4489243"
Get-WindowsUpdate -KBArticleID $HideList –Hide
           

下次使用 Get-WUlist 指令掃描更新時,隐藏的更新将不會顯示在可安裝的更新清單中。

顯示被隐藏在此計算機上的更新清單的方式:

Get-WindowsUpdate –IsHidden

要取消隐藏某些更新,請運作以下指令: