Skript PowerShell na kontrolu stavu služby Windows Update

Používatelia, ktorí chcú zistiť, či je v ich systéme Windows 10 nainštalovaná najnovšia kumulatívna aktualizácia, zvyčajne používajú túto metódu na kontrolu histórie aktualizácií systému Windows 10 . V tomto príspevku vám ukážeme, ako získať aktuálne informácie o opravách pre Windows 10 pomocou skriptu PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Skript PowerShell na kontrolu stavu služby Windows Update

(PowerShell)Skript PowerShell na kontrolu stavu služby Windows Update

Skript PowerShell možno použiť na hlásenie, na ktorej zostave operačného systému je počítač so systémom Windows 10(Windows 10) momentálne nainštalovaný, ako aj na to, ktorá aktualizácia je najnovšou aktualizáciou dostupnou pre zariadenie. Môže tiež podávať správy o všetkých aktualizáciách systému Windows(Windows) publikovaných pre verziu systému Windows 10 , na ktorej pracovná stanica momentálne pracuje.

Po spustení skriptu sa zobrazia nasledujúce informácie:

  • Aktuálna verzia OS
  • Aktuálne vydanie OS
  • Aktuálne číslo zostavy OS
  • Nainštalovaná aktualizácia, ktorá zodpovedá číslu zostavy, ako aj číslu KB a odkazu na informačnú stránku
  • Najnovšia dostupná aktualizácia pre verziu OS

Ak chcete získať informácie o aktuálnych opravách systému Windows 10(Windows 10) pomocou skriptu PowerShell , musíte vytvoriť a spustiť skript PowerShell(create and run the PowerShell script) pomocou kódu nižšie z 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

Dostupné aktualizácie Preview(Preview) alebo Out-of-band , ktoré sú novšie ako tie, ktoré ste nainštalovali, môžete vylúčiť z nahlásenia ako najnovšiu dostupnú aktualizáciu, takže sa môžete sústrediť len na kumulatívne aktualizácie spustením príkazu nižšie:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Môžete tiež zobraziť zoznam všetkých aktualizácií systému Windows , ktoré (Windows)spoločnosť Microsoft(Microsoft) zverejnila pre vašu verziu operačného systému, pomocou nasledujúceho príkazu:

Get-CurrentPatchInfo -ListAvailable

Ak chcete zo zoznamu vylúčiť aktualizácie Preview a Out-of-band , ale uviesť všetky aktualizácie systému Windows , ktoré (Windows)spoločnosť Microsoft(Microsoft) zverejnila pre vašu verziu operačného systému, spustite príkaz nižšie:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

To je všetko!

Čítať ďalej(Read next) : Stránka PowerShell Module Browser(PowerShell Module Browser site) vám umožňuje vyhľadávať cmdlety a balíčky.



About the author

Mám vzdelanie v oblasti počítačového inžinierstva a informačných technológií, čo mi dalo jedinečný pohľad na platformy Windows 10 a 11. Najmä mám skúsenosti s Windows 10 " Desktop Experience " a prehliadačom Microsoft Edge. Moje skúsenosti s týmito dvoma platformami mi umožňujú hlboko pochopiť, ako fungujú, a moje odborné znalosti v týchto oblastiach mi umožňujú poskytovať spoľahlivé rady, ako ich zlepšiť.



Related posts