สคริปต์ PowerShell เพื่อตรวจสอบสถานะ Windows Update

โดยปกติ ผู้ใช้ที่ต้องการทราบว่ามีการติดตั้งการอัปเดตแบบสะสมล่าสุดบนระบบ Windows 10 หรือไม่ ใช้วิธีนี้เพื่อตรวจสอบประวัติการอัปเดต Windows 10 ในโพสต์นี้ เราจะแสดงวิธีรับข้อมูลแพตช์ปัจจุบันสำหรับ Windows 10 โดยใช้สคริปต์ PowerShell(how to get current patch information for Windows 10 using a PowerShell script.)

สคริปต์ PowerShell เพื่อตรวจสอบสถานะ Windows Update

(PowerShell)สคริปต์PowerShell เพื่อตรวจสอบ สถานะWindows Update

สคริปต์PowerShellสามารถใช้เพื่อรายงานว่าระบบปฏิบัติการใดที่สร้างคอมพิวเตอร์ Windows 10(Windows 10)ที่กำลังเปิดอยู่ รวมถึงการอัปเดตใดที่เป็นการอัปเดตล่าสุดสำหรับอุปกรณ์ นอกจากนี้ยังสามารถรายงาน การอัปเดต Windows ทั้งหมดที่ เผยแพร่สำหรับเวอร์ชันของWindows 10ที่เวิร์กสเตชันเปิดอยู่

เมื่อคุณเรียกใช้สคริปต์ ข้อมูลต่อไปนี้จะปรากฏขึ้น:

  • ระบบปฏิบัติการเวอร์ชันปัจจุบัน
  • OS รุ่นปัจจุบัน
  • หมายเลขบิลด์ระบบปฏิบัติการปัจจุบัน
  • การอัปเดตที่ติดตั้งซึ่งสอดคล้องกับหมายเลขบิลด์นั้น ตลอดจนหมายเลข KB และลิงก์ไปยังหน้าข้อมูล
  • การอัปเดตล่าสุดที่มีสำหรับเวอร์ชัน OS

ในการรับข้อมูลแพตช์ปัจจุบันของWindows 10 โดยใช้สคริปต์ (Windows 10)PowerShellคุณต้องสร้างและเรียกใช้สคริปต์ PowerShell(create and run the PowerShell script)โดยใช้รหัสด้านล่างจาก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

คุณสามารถยกเว้น การ ดูตัวอย่าง(Preview)หรือ การอัปเดต นอกแบนด์(Out-of-band)ที่มีให้ซึ่งล่าสุดกว่าที่คุณติดตั้งไม่ให้รายงานเป็นการอัปเดตล่าสุดที่มีได้ ดังนั้นคุณจึงสามารถมุ่งเน้นไปที่การอัปเดตสะสมได้โดยการเรียกใช้คำสั่งด้านล่าง:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

คุณยังสามารถแสดงรายการ อัปเดต Windows ทั้งหมด ที่Microsoftเผยแพร่สำหรับเวอร์ชันระบบปฏิบัติการของคุณด้วยคำสั่งต่อไปนี้:

Get-CurrentPatchInfo -ListAvailable

หากคุณต้องการแยก การอัปเดต PreviewและOut-of-bandออกจากรายการ แต่แสดงรายการ อัปเดต Windows ทั้งหมด ที่Microsoftเผยแพร่สำหรับเวอร์ชัน OS ของคุณ ให้เรียกใช้คำสั่งด้านล่าง:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

แค่นั้นแหละ!

อ่านต่อไป(Read next) : ไซต์เบราว์เซอร์โมดูล PowerShell(PowerShell Module Browser site)ให้คุณค้นหา cmdlets & แพ็คเกจ



About the author

ฉันเป็นนักพัฒนาเว็บที่มีประสบการณ์มากกว่า 10 ปี ฉันเชี่ยวชาญด้านการพัฒนา Chrome OS และเคยทำงานในโครงการต่างๆ มากมายตั้งแต่สตาร์ทอัพขนาดเล็กไปจนถึงบริษัทที่ติดอันดับ Fortune 500 ฉันยังเป็นผู้เชี่ยวชาญในบัญชีผู้ใช้และความปลอดภัยของครอบครัว และได้พัฒนาแอพ Android ที่ประสบความสำเร็จหลายตัว



Related posts