PowerShell skripta za provjeru statusa Windows Update

Korisnici koji žele saznati je li najnovije kumulativno ažuriranje instalirano na njihov sustav Windows 10 obično koriste ovu metodu za provjeru povijesti ažuriranja sustava Windows 10 . U ovom postu ćemo vam pokazati kako dobiti trenutne informacije o zakrpama za Windows 10 pomoću PowerShell skripte.(how to get current patch information for Windows 10 using a PowerShell script.)

PowerShell skripta za provjeru statusa Windows Update

PowerShell skripta za provjeru statusa Windows Update

PowerShell skripta može se koristiti za izvješćivanje o tome na kojoj se verziji OS-a trenutno nalazi računalo sa sustavom Windows 10(Windows 10) , kao i koje je ažuriranje najnovije ažuriranje dostupno za uređaj. Također može izvijestiti o svim ažuriranjima sustava Windows(Windows) objavljenim za verziju sustava Windows 10 na kojoj je trenutno uključena radna stanica.

Kada pokrenete skriptu, prikazat će se sljedeće informacije:

  • Trenutna verzija OS-a
  • Trenutno izdanje OS-a
  • Broj trenutne verzije OS-a
  • Instalirano ažuriranje koje odgovara tom broju verzije, kao i KB broj i poveznica na stranicu s informacijama
  • Najnovije dostupno ažuriranje za verziju OS-a

Da biste dobili informacije o trenutačnim zakrpama za Windows 10 pomoću (Windows 10)PowerShell skripte, trebate stvoriti i pokrenuti PowerShell skriptu(create and run the PowerShell script) pomoću koda u nastavku s Githuba(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

Možete isključiti dostupna ažuriranja za pregled(Preview) ili izvan pojasa(Out-of-band) koja su novija od onog koje ste instalirali iz izvješća kao najnovije dostupno ažuriranje, tako da se možete samo usredotočiti na kumulativna ažuriranja pokretanjem naredbe u nastavku:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Također možete navesti sva ažuriranja sustava Windows koja je (Windows)Microsoft objavio za vašu verziju OS-a sljedećom naredbom:

Get-CurrentPatchInfo -ListAvailable

Ako s popisa želite isključiti ažuriranja za pregled(Preview) i ažuriranja izvan pojasa(Out-of-band) , ali navesti sva ažuriranja za Windows koja je (Windows)Microsoft objavio za vašu verziju OS-a, pokrenite naredbu u nastavku:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

To je to!

Pročitajte sljedeće(Read next) : web- mjesto preglednika PowerShell modula(PowerShell Module Browser site) omogućuje vam pretraživanje cmdlet-a i paketa.



About the author

Bok tamo! Računalni sam programer s preko 10 godina iskustva u tom području. Specijaliziran sam za razvoj i održavanje softvera za pametne telefone i Windows ažuriranja. Osim toga, nudim svoje usluge kao mjesečni predstavnik podrške klijentima e-pošte.



Related posts