Σενάριο PowerShell για έλεγχο της κατάστασης του Windows Update

Συνήθως, οι χρήστες που επιθυμούν να μάθουν εάν η πιο πρόσφατη αθροιστική ενημέρωση είναι εγκατεστημένη στο σύστημά τους Windows 10 χρησιμοποιούν αυτήν τη μέθοδο για να ελέγξουν το Ιστορικό ενημερώσεων των Windows 10 . Σε αυτήν την ανάρτηση, θα σας δείξουμε πώς να λαμβάνετε τις τρέχουσες πληροφορίες ενημέρωσης κώδικα για τα Windows 10 χρησιμοποιώντας μια δέσμη ενεργειών PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Σενάριο PowerShell για έλεγχο της κατάστασης του Windows Update

Σενάριο PowerShell(PowerShell) για έλεγχο της κατάστασης του Windows Update

Η δέσμη ενεργειών PowerShell μπορεί να χρησιμοποιηθεί για να αναφέρει σε ποιο λειτουργικό σύστημα βρίσκεται ένας υπολογιστής με Windows 10 , καθώς και ποια ενημέρωση είναι η πιο πρόσφατη διαθέσιμη ενημέρωση στη συσκευή. Μπορεί επίσης να αναφέρει για όλες τις ενημερώσεις των Windows που δημοσιεύονται για την έκδοση των Windows 10 στην οποία βρίσκεται επί του παρόντος ο σταθμός εργασίας.

Όταν εκτελείτε το σενάριο, θα εμφανιστούν οι ακόλουθες πληροφορίες:

  • Τρέχουσα έκδοση λειτουργικού συστήματος
  • Τρέχουσα έκδοση λειτουργικού συστήματος
  • Τρέχων αριθμός έκδοσης λειτουργικού συστήματος
  • Η εγκατεστημένη ενημέρωση που αντιστοιχεί σε αυτόν τον αριθμό έκδοσης, καθώς και τον αριθμό KB και έναν σύνδεσμο προς τη σελίδα πληροφοριών
  • Η πιο πρόσφατη διαθέσιμη ενημέρωση για την έκδοση του λειτουργικού συστήματος

Για να λάβετε πληροφορίες τρέχουσας ενημέρωσης κώδικα των Windows 10 χρησιμοποιώντας το σενάριο (Windows 10)PowerShell , πρέπει να δημιουργήσετε και να εκτελέσετε το σενάριο PowerShell(create and run the PowerShell script) χρησιμοποιώντας τον παρακάτω κώδικα από το 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

Μπορείτε να εξαιρέσετε τις διαθέσιμες ενημερώσεις προεπισκόπησης(Preview) ή εκτός ζώνης(Out-of-band) που είναι πιο πρόσφατες από αυτήν που έχετε εγκαταστήσει από την αναφορά ως την πιο πρόσφατη διαθέσιμη ενημέρωση, ώστε να μπορείτε απλώς να εστιάσετε στις αθροιστικές ενημερώσεις εκτελώντας την παρακάτω εντολή:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Μπορείτε επίσης να παραθέσετε όλες τις ενημερώσεις των Windows που έχει δημοσιεύσει η (Windows)Microsoft για την έκδοση του λειτουργικού σας συστήματος με την ακόλουθη εντολή:

Get-CurrentPatchInfo -ListAvailable

Εάν θέλετε να εξαιρέσετε τις ενημερώσεις προεπισκόπησης(Preview) και εκτός ζώνης(Out-of-band) από τη λίστα, αλλά αναφέρετε όλες τις ενημερώσεις των Windows που έχει δημοσιεύσει η (Windows)Microsoft για την έκδοση του λειτουργικού σας συστήματος, εκτελέστε την παρακάτω εντολή:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Αυτό είναι!

Διαβάστε στη συνέχεια(Read next) : Ο ιστότοπος του προγράμματος περιήγησης PowerShell Module(PowerShell Module Browser site) σάς επιτρέπει να αναζητάτε cmdlet και πακέτα.



About the author

Είμαι μηχανικός λογισμικού με πάνω από δύο χρόνια εμπειρία σε εφαρμογές για φορητές συσκευές και επιτραπέζιους υπολογιστές. Έχω εξειδίκευση στις ενημερώσεις των Windows, τις υπηρεσίες και το Gmail. Οι δεξιότητές μου με κάνουν τον τέλειο υποψήφιο για εργασίες όπως η ανάπτυξη εφαρμογών Windows ή η συντήρηση προγραμμάτων-πελατών email.



Related posts