Script di PowerShell per controllare lo stato di Windows Update

Di solito, gli utenti che desiderano scoprire se l'ultimo aggiornamento cumulativo è installato sul proprio sistema Windows 10 utilizzano questo metodo per controllare la cronologia degli aggiornamenti di Windows 10 . In questo post, ti mostreremo come ottenere le informazioni sulla patch corrente per Windows 10 utilizzando uno script PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Script di PowerShell per controllare lo stato di Windows Update

(PowerShell)Script di PowerShell per controllare lo stato di Windows Update

Lo script PowerShell può essere utilizzato per segnalare quale build del sistema operativo è attualmente su un computer Windows 10 e quale aggiornamento è l'ultimo aggiornamento disponibile per il dispositivo. Può anche segnalare tutti gli aggiornamenti di Windows pubblicati per la versione di Windows 10 su cui è attualmente attiva una workstation.

Quando esegui lo script, verranno visualizzate le seguenti informazioni:

  • Versione attuale del sistema operativo
  • Edizione del sistema operativo corrente
  • Numero di build del sistema operativo corrente
  • L'aggiornamento installato che corrisponde a quel numero di build, nonché il numero KB e un collegamento alla pagina delle informazioni
  • L'ultimo aggiornamento disponibile per la versione del sistema operativo

Per ottenere le informazioni sulla patch corrente di Windows 10 usando lo script (Windows 10)PowerShell , devi creare ed eseguire lo script PowerShell(create and run the PowerShell script) usando il codice seguente da 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

Puoi escludere gli aggiornamenti in anteprima(Preview) o fuori banda(Out-of-band) disponibili più recenti di quello che hai installato dalla segnalazione come l'ultimo aggiornamento disponibile, quindi puoi concentrarti solo sugli aggiornamenti cumulativi eseguendo il comando seguente:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Puoi anche elencare tutti gli aggiornamenti di Windows che (Windows)Microsoft ha pubblicato per la versione del tuo sistema operativo con il comando seguente:

Get-CurrentPatchInfo -ListAvailable

Se desideri escludere l' anteprima(Preview) e gli aggiornamenti fuori banda(Out-of-band) dall'elenco ma elencare tutti gli aggiornamenti di Windows pubblicati da (Windows)Microsoft per la versione del tuo sistema operativo, esegui il comando seguente:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Questo è tutto!

Leggi il prossimo(Read next) : Il sito del browser del modulo PowerShell(PowerShell Module Browser site) consente di cercare cmdlet e pacchetti.



About the author

Sono un ingegnere del software con oltre due anni di esperienza lavorando su applicazioni mobili e desktop. Ho esperienza in aggiornamenti di Windows, servizi e Gmail. Le mie capacità mi rendono il candidato perfetto per attività come lo sviluppo di applicazioni Windows o la manutenzione dei client di posta elettronica.



Related posts