PowerShell-script til at kontrollere Windows Update-status

Normalt bruger brugere, der ønsker at finde ud af, om den seneste kumulative opdatering er installeret på deres Windows 10-system, denne metode til at tjekke Windows 10-opdateringshistorikken . I dette indlæg viser vi dig, hvordan du får aktuelle patchoplysninger til Windows 10 ved hjælp af et PowerShell-script.(how to get current patch information for Windows 10 using a PowerShell script.)

PowerShell-script til at kontrollere Windows Update-status

PowerShell -script til at kontrollere Windows Update - status

PowerShell - scriptet kan bruges til at rapportere, hvilken OS-bygning en Windows 10 -computer er på i øjeblikket, samt hvilken opdatering der er den seneste opdatering, der er tilgængelig for enheden. Den kan også rapportere om alle Windows -opdateringer, der er udgivet til den version af Windows 10 , som en arbejdsstation er på i øjeblikket.

Når du kører scriptet, vil følgende oplysninger blive vist:

  • Aktuel OS-version
  • Nuværende OS-udgave
  • Aktuelt OS Build-nummer
  • Den installerede opdatering, der svarer til det pågældende build-nummer, samt KB-nummeret og et link til info-siden
  • Den seneste tilgængelige opdatering til OS-versionen

For at få Windows 10 aktuelle patchoplysninger ved hjælp af PowerShell -script, skal du oprette og køre PowerShell-scriptet(create and run the PowerShell script) ved hjælp af koden nedenfor fra 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 udelukke tilgængelige forhåndsvisninger(Preview) eller opdateringer uden for båndet(Out-of-band) , der er nyere end den, du har installeret, fra at blive rapporteret som den seneste tilgængelige opdatering, så du bare kan fokusere på de kumulative opdateringer ved at køre kommandoen nedenfor:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Du kan også liste alle Windows -opdateringer, som Microsoft har udgivet til din OS-version med følgende kommando:

Get-CurrentPatchInfo -ListAvailable

Hvis du vil udelukke Preview og Out-of-band- opdateringer fra listen, men liste alle Windows - opdateringer, som Microsoft har udgivet til din OS-version, skal du køre kommandoen nedenfor:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Det er det!

Læs næste(Read next) : PowerShell Module Browser-webstedet(PowerShell Module Browser site) lader dig søge efter cmdlets og pakker.



About the author

Jeg er professionel computertekniker og har over 10 års erfaring inden for området. Jeg har specialiseret mig i Windows 7 og Windows Apps udvikling, samt Cool Websites design. Jeg er ekstremt vidende og erfaren på området, og vil være et værdifuldt aktiv for enhver organisation, der ønsker at vokse deres forretning.



Related posts