Skrypt PowerShell do sprawdzania stanu Windows Update

Zwykle użytkownicy, którzy chcą dowiedzieć się, czy najnowsza zbiorcza aktualizacja jest zainstalowana w ich systemie Windows 10, korzystają z tej metody, aby sprawdzić historię aktualizacji systemu Windows 10 . W tym poście pokażemy, jak uzyskać aktualne informacje o poprawce dla systemu Windows 10 za pomocą skryptu PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Skrypt PowerShell do sprawdzania stanu Windows Update

Skrypt PowerShell(PowerShell) do sprawdzania stanu Windows Update

Skrypt programu PowerShell może służyć do zgłaszania, na którym kompilacji systemu operacyjnego jest obecnie zainstalowany komputer z systemem Windows 10(Windows 10) , a także która aktualizacja jest najnowszą aktualizacją dostępną dla urządzenia. Może również raportować wszystkie aktualizacje systemu Windows(Windows) opublikowane dla wersji systemu Windows 10 , na której aktualnie znajduje się stacja robocza.

Po uruchomieniu skryptu zostaną wyświetlone następujące informacje:

  • Aktualna wersja systemu operacyjnego
  • Bieżąca wersja systemu operacyjnego
  • Aktualny numer kompilacji systemu operacyjnego
  • Zainstalowana aktualizacja, która odpowiada numerowi kompilacji, a także numerowi KB i linkowi do strony informacyjnej
  • Najnowsza dostępna aktualizacja wersji systemu operacyjnego

Aby uzyskać aktualne informacje o poprawce systemu Windows 10 za pomocą skryptu (Windows 10)PowerShell , musisz utworzyć i uruchomić skrypt PowerShell(create and run the PowerShell script) przy użyciu poniższego kodu z usługi Github(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żesz wykluczyć dostępne aktualizacje w wersji zapoznawczej(Preview) lub poza pasmem(Out-of-band) , które są nowsze niż te, które zainstalowałeś, aby były zgłaszane jako najnowsza dostępna aktualizacja, dzięki czemu możesz po prostu skupić się na aktualizacjach zbiorczych, uruchamiając poniższe polecenie:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Możesz również wyświetlić listę wszystkich aktualizacji systemu Windows(Windows) opublikowanych przez firmę Microsoft dla Twojej wersji systemu operacyjnego za pomocą następującego polecenia :(Microsoft)

Get-CurrentPatchInfo -ListAvailable

Jeśli chcesz wykluczyć aktualizacje Preview i Out-of-band z listy, ale wyświetlić listę wszystkich aktualizacji systemu Windows opublikowanych przez firmę (Windows)Microsoft dla Twojej wersji systemu operacyjnego, uruchom poniższe polecenie:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Otóż ​​to!

Czytaj dalej(Read next) : Witryna PowerShell Module Browser(PowerShell Module Browser site) umożliwia wyszukiwanie poleceń cmdlet i pakietów.



About the author

Jestem inżynierem oprogramowania z ponad dwuletnim doświadczeniem w pracy nad aplikacjami mobilnymi i desktopowymi. Mam doświadczenie w aktualizacjach systemu Windows, usługach i Gmailu. Moje umiejętności sprawiają, że jestem idealnym kandydatem do zadań takich jak tworzenie aplikacji Windows lub utrzymywanie klientów poczty e-mail.



Related posts