Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Windows

Lấy thông tin bản vá (patch) hiện tại của Windows 10 bằng script PowerShell

Người dùng thường kiểm tra lịch sử cập nhật để biết cumulative update mới nhất đã cài. Bài viết hướng dẫn lấy thông tin patch hiện tại Windows 10 bằng script PowerShell.

Lấy thông tin bản vá (patch) hiện tại của Windows 10 bằng script PowerShell

Script PowerShell kiểm tra trạng thái Windows Update

Script báo cáo:

  • Phiên bản OS hiện tại
  • Phiên bản OS (Edition)
  • Số build OS hiện tại
  • Update đã cài tương ứng build đó (kèm số KB và link trang thông tin)
  • Update mới nhất có sẵn cho phiên bản OS

Tạo và chạy script PowerShell với mã sau (nguồn Github):

[CmdletBinding()]
Param(
 [switch]$ListAllAvailable,
 [switch]$ExcludePreview,
 [switch]$ExcludeOutofBand
)
$ProgressPreference = 'SilentlyContinue'
$URI = "https://aka.ms/WindowsUpdateHistory"
# Windows 10 release history
Function Get-MyWindowsVersion {
 [CmdletBinding()]
 Param ( $ComputerName = $env:COMPUTERNAME )
 $Table = New-Object System.Data.DataTable
 $Table.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
 $ProductName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ProductName).ProductName
 Try { $Version = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ReleaseID -ErrorAction Stop).ReleaseID }
 Catch { $Version = "N/A" }
 $CurrentBuild = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name CurrentBuild).CurrentBuild
 $UBR = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name UBR).UBR
 $OSVersion = $CurrentBuild + "." + $UBR
 $TempTable = New-Object System.Data.DataTable
 $TempTable.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
 [void]$TempTable.Rows.Add($env:COMPUTERNAME,$ProductName,$Version,$OSVersion)
 Return $TempTable }
Function Convert-ParsedArray { Param($Array)
 $ArrayList = New-Object System.Collections.ArrayList
 foreach ($item in $Array) {
 [void]$ArrayList.Add([PSCustomObject]@{
 Update = $item.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - ')
 KB = "KB" + $item.href.Split('/')[-1]
 InfoURL = "https://support.microsoft.com" + $item.href
 OSBuild = $item.outerHTML.Split('(OS ')[1].Split()[1]
 })
 }
 Return $ArrayList }
If ($PSVersionTable.PSVersion.Major -ge 6) {
 $Response = Invoke-WebRequest -Uri $URI -ErrorAction Stop }
else { $Response = Invoke-WebRequest -Uri $URI -UseBasicParsing -ErrorAction Stop }
If (!($Response.Links)) { throw "Response was not parsed as HTML"}
$VersionDataRaw = $Response.Links | where {$_.outerHTML -match "supLeftNavLink" -and $_.outerHTML -match "KB"}
$CurrentWindowsVersion = Get-MyWindowsVersion -ErrorAction Stop
If ($ListAllAvailable) {
 If ($ExcludePreview -and $ExcludeOutofBand) {
 $AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview" -and $_.outerHTML -notmatch "Out-of-band"} }
 ElseIf ($ExcludePreview) {
 $AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"} }
 ElseIf ($ExcludeOutofBand) {
 $AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"} }
 Else { $AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]} }
 $UniqueList = (Convert-ParsedArray -Array $AllAvailable) | Sort OSBuild -Descending -Unique
 $Table = New-Object System.Data.DataTable
 [void]$Table.Columns.AddRange(@('Update','KB','InfoURL'))
 foreach ($Update in $UniqueList) {
 [void]$Table.Rows.Add($Update.Update, $Update.KB, $Update.InfoURL) }
 Return $Table }
$CurrentPatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'} | Select -First 1
If ($ExcludePreview -and $ExcludeOutofBand) {
 $LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band" -and $_.outerHTML -notmatch "Preview"} | Select -First 1 }
ElseIf ($ExcludePreview) {
 $LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"} | Select -First 1 }
ElseIf ($ExcludeOutofBand) {
 $LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"} | Select -First 1 }
Else { $LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]} | Select -First 1 }
$Table = New-Object System.Data.DataTable
[void]$Table.Columns.AddRange(@('OSVersion','OSEdition','OSBuild','CurrentInstalledUpdate','CurrentInstalledUpdateKB','CurrentInstalledUpdateInfoURL','LatestAvailableUpdate','LastestAvailableUpdateKB','LastestAvailableUpdateInfoURL'))
[void]$Table.Rows.Add(
 $CurrentWindowsVersion.Version,
 $CurrentWindowsVersion.'Windows Edition',
 $CurrentWindowsVersion.'OS Build',
 $CurrentPatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
 "KB" + $CurrentPatch.href.Split('/')[-1],
 "https://support.microsoft.com" + $CurrentPatch.href,
 $LatestAvailablePatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
 "KB" + $LatestAvailablePatch.href.Split('/')[-1],
 "https://support.microsoft.com" + $LatestAvailablePatch.href )
Return $Table

Loại bỏ Preview/Out-of-band updates gần hơn bản đã cài:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Liệt kê tất cả update Microsoft phát hành cho phiên bản OS:

Get-CurrentPatchInfo -ListAvailable

Liệt kê tất cả nhưng loại trừ Preview/Out-of-band:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Xong!

Đọc thêm: Trang PowerShell Module Browser tìm cmdlets & packages.