PowerShell-skript för att kontrollera Windows Update-status

Vanligtvis använder användare som vill ta reda på om den senaste kumulativa uppdateringen är installerad på deras Windows 10-system den här metoden för att kontrollera Windows 10 Update History . I det här inlägget kommer vi att visa dig hur du får aktuell patchinformation för Windows 10 med hjälp av ett PowerShell-skript.(how to get current patch information for Windows 10 using a PowerShell script.)

PowerShell-skript för att kontrollera Windows Update-status

PowerShell- skript för att kontrollera Windows Update- status

PowerShell -(PowerShell) skriptet kan användas för att rapportera vilket OS-bygge en Windows 10 -dator för närvarande är på samt vilken uppdatering som är den senaste uppdateringen som är tillgänglig för enheten. Den kan också rapportera om alla Windows -uppdateringar som publiceras för den version av Windows 10 som en arbetsstation för närvarande är på.

När du kör skriptet kommer följande information att visas:

  • Aktuell OS-version
  • Aktuell OS-utgåva
  • Aktuellt OS Build-nummer
  • Den installerade uppdateringen som motsvarar det buildnumret, samt KB-numret och en länk till infosidan
  • Den senaste tillgängliga uppdateringen för OS-versionen

För att få aktuell patchinformation för Windows 10 med (Windows 10)PowerShell- skriptet måste du skapa och köra PowerShell-skriptet(create and run the PowerShell script) med koden nedan från 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

Du kan utesluta tillgängliga förhandsgransknings-(Preview) eller out-of-band- uppdateringar som är nyare än den du har installerat från att rapporteras som den senaste tillgängliga uppdateringen, så du kan bara fokusera på de kumulativa uppdateringarna genom att köra kommandot nedan:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Du kan också lista alla Windows -uppdateringar som Microsoft har publicerat för din OS-version med följande kommando:

Get-CurrentPatchInfo -ListAvailable

Om du vill utesluta Preview och Out-of-band- uppdateringar från listan men lista alla Windows - uppdateringar som Microsoft har publicerat för din OS-version, kör kommandot nedan:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Det är allt!

Läs nästa(Read next) : Webbläsarwebbplatsen för PowerShell Module(PowerShell Module Browser site) låter dig söka efter cmdlets och paket.



About the author

Jag är en mjukvaruingenjör med erfarenhet av både Chrome och spelapplikationer. Jag har jobbat med lösningar för webbläsaren Google Chrome de senaste 4 åren och har även jobbat med spel för flera olika plattformar. Mina kunskaper ligger i att designa, testa och hantera mjukvaruprojekt. Utöver mitt arbete som mjukvaruingenjör har jag även erfarenhet av sekretess, användarkonton och familjesäkerhetsfrågor.



Related posts