Tập lệnh PowerShell để kiểm tra trạng thái Windows Update

Thông thường, người dùng muốn tìm hiểu xem liệu bản cập nhật tích lũy mới nhất có được cài đặt trên hệ thống Windows 10 của họ hay không sử dụng phương pháp này để kiểm tra Lịch sử cập nhật Windows 10 . Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách lấy thông tin bản vá hiện tại cho Windows 10 bằng cách sử dụng tập lệnh PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Tập lệnh PowerShell để kiểm tra trạng thái Windows Update

Tập lệnh PowerShell(PowerShell) để kiểm tra trạng thái Windows Update

Tập lệnh PowerShell(PowerShell) có thể được sử dụng để báo cáo phiên bản hệ điều hành nào trên máy tính Windows 10 hiện đang sử dụng cũng như bản cập nhật nào là bản cập nhật mới nhất có sẵn cho thiết bị. Nó cũng có thể báo cáo về tất cả các bản cập nhật Windows được xuất bản cho phiên bản Windows 10 mà một máy trạm hiện đang sử dụng.

Khi bạn chạy tập lệnh, thông tin sau sẽ được hiển thị:

  • Phiên bản hệ điều hành hiện tại
  • Phiên bản hệ điều hành hiện tại
  • Số bản dựng hệ điều hành hiện tại
  • Bản cập nhật đã cài đặt tương ứng với số bản dựng đó, cũng như số KB và liên kết đến trang thông tin
  • Bản cập nhật mới nhất hiện có cho phiên bản hệ điều hành

Để nhận thông tin bản vá hiện tại của Windows 10 bằng cách sử dụng tập lệnh (Windows 10)PowerShell , bạn cần tạo và chạy tập lệnh PowerShell(create and run the PowerShell script) bằng mã bên dưới từ 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] # Just for sorting
})
}
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

Bạn có thể loại trừ các bản cập nhật Xem trước(Preview) hoặc Ngoài băng tần(Out-of-band) có sẵn mới hơn bản bạn đã cài đặt khỏi bị báo cáo là bản cập nhật mới nhất hiện có, vì vậy bạn có thể chỉ cần tập trung vào các bản cập nhật tích lũy bằng cách chạy lệnh bên dưới:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Bạn cũng có thể liệt kê tất cả các bản cập nhật Windows mà (Windows)Microsoft đã xuất bản cho phiên bản hệ điều hành của bạn bằng lệnh sau:

Get-CurrentPatchInfo -ListAvailable

Nếu bạn muốn loại trừ các bản cập nhật Xem trước(Preview)Ngoài băng tần(Out-of-band) khỏi danh sách nhưng liệt kê tất cả các bản cập nhật Windows mà (Windows)Microsoft đã xuất bản cho phiên bản hệ điều hành của bạn, hãy chạy lệnh bên dưới:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Đó là nó!

Đọc tiếp theo(Read next) : Trang web Trình duyệt mô-đun PowerShell(PowerShell Module Browser site) cho phép bạn tìm kiếm lệnh ghép ngắn & gói.



About the author

Tôi là nhà tư vấn công nghệ với hơn 10 năm kinh nghiệm trong lĩnh vực phần mềm. Tôi chuyên về Microsoft Office, Edge và các công nghệ liên quan khác. Tôi đã làm việc trong nhiều dự án khác nhau cho cả các công ty lớn và nhỏ, và tôi cực kỳ am hiểu về các nền tảng và công cụ khác nhau hiện nay.



Related posts