PowerShell-Skript zum Überprüfen des Windows Update-Status

Normalerweise verwenden Benutzer, die herausfinden möchten, ob das neueste kumulative Update auf ihrem Windows 10-System installiert ist, diese Methode, um den Windows 10-Update-Verlauf zu überprüfen . In diesem Beitrag zeigen wir Ihnen, wie Sie mithilfe eines PowerShell-Skripts aktuelle Patch-Informationen für Windows 10 erhalten.(how to get current patch information for Windows 10 using a PowerShell script.)

PowerShell-Skript zum Überprüfen des Windows Update-Status

PowerShell- Skript zum Überprüfen des Windows Update- Status

Das PowerShell - Skript kann verwendet werden, um zu melden, auf welchem ​​Betriebssystem sich ein Windows 10 -Computer derzeit befindet und welches Update das neueste für das Gerät verfügbare Update ist. Es kann auch über alle Windows -Updates berichten, die für die Version von Windows 10 veröffentlicht wurden, auf der sich eine Arbeitsstation derzeit befindet.

Wenn Sie das Skript ausführen, werden die folgenden Informationen angezeigt:

  • Aktuelle OS-Version
  • Aktuelle OS-Edition
  • Aktuelle Betriebssystem-Build-Nummer
  • Das installierte Update, das dieser Build-Nummer entspricht, sowie die KB-Nummer und einen Link zur Infoseite
  • Das neueste verfügbare Update für die Betriebssystemversion

Um aktuelle Patchinformationen für Windows 10 mithilfe des (Windows 10)PowerShell - Skripts abzurufen, müssen Sie das PowerShell-Skript mithilfe des folgenden Codes von Github erstellen und ausführen(create and run the PowerShell script) .

[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

Sie können verfügbare Vorschau-(Preview) oder Out-of-Band- Updates ausschließen, die neuer sind als das von Ihnen installierte, um als neuestes verfügbares Update gemeldet zu werden, sodass Sie sich einfach auf die kumulativen Updates konzentrieren können, indem Sie den folgenden Befehl ausführen:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Mit dem folgenden Befehl können Sie auch alle Windows -Updates auflisten, die Microsoft für Ihre Betriebssystemversion veröffentlicht hat:

Get-CurrentPatchInfo -ListAvailable

Wenn Sie Vorschau-(Preview) und Out-of-Band- Updates aus der Liste ausschließen, aber alle Windows - Updates auflisten möchten, die Microsoft für Ihre Betriebssystemversion veröffentlicht hat, führen Sie den folgenden Befehl aus:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Das ist es!

Weiterlesen(Read next) : Auf der PowerShell Module Browser-Site können Sie nach Cmdlets und Paketen suchen.



About the author

Ich bin ein Softwareentwickler mit über 10 Jahren Erfahrung auf den Plattformen Windows 11 und 10. Mein Fokus lag auf der Entwicklung und Wartung hochwertiger Software für Windows 7 und Windows 8. Ich habe auch an einer Vielzahl anderer Projekte gearbeitet, einschließlich, aber nicht beschränkt auf Chrome, Firefox, Xbox One und Dateien.



Related posts