Script de PowerShell para verificar el estado de actualización de Windows

Por lo general, los usuarios que desean saber si la última actualización acumulativa está instalada en su sistema Windows 10 usan este método para verificar el Historial de actualizaciones de Windows 10 . En esta publicación, le mostraremos cómo obtener información sobre parches actuales para Windows 10 mediante un script de PowerShell.(how to get current patch information for Windows 10 using a PowerShell script.)

Script de PowerShell para verificar el estado de actualización de Windows

(PowerShell)Script de PowerShell para verificar el estado de actualización de Windows(Windows Update)

El script de PowerShell se puede usar para informar en qué sistema operativo se encuentra actualmente una computadora con Windows 10 , así como también qué actualización es la última disponible para el dispositivo. También puede informar sobre todas las actualizaciones de Windows publicadas para la versión de Windows 10 en la que se encuentra actualmente una estación de trabajo.

Cuando ejecute el script, se mostrará la siguiente información:

  • Versión actual del sistema operativo
  • Edición actual del sistema operativo
  • Número de compilación del sistema operativo actual
  • La actualización instalada que corresponde a ese número de compilación, así como el número de KB y un enlace a la página de información.
  • La última actualización disponible para la versión del sistema operativo

Para obtener la información del parche actual de Windows 10 mediante el script de (Windows 10)PowerShell , debe crear y ejecutar el script de PowerShell(create and run the PowerShell script) mediante el siguiente código de 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

Puede excluir las actualizaciones de vista previa(Preview) o fuera de banda(Out-of-band) disponibles que son más recientes que la que instaló para que no se informen como la última actualización disponible, por lo que puede concentrarse en las actualizaciones acumulativas ejecutando el siguiente comando:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

También puede enumerar todas las actualizaciones de Windows que (Windows)Microsoft ha publicado para su versión de sistema operativo con el siguiente comando:

Get-CurrentPatchInfo -ListAvailable

Si desea excluir la vista previa(Preview) y las actualizaciones fuera de banda(Out-of-band) de la lista, pero enumera todas las actualizaciones de Windows que (Windows)Microsoft ha publicado para su versión de sistema operativo, ejecute el siguiente comando:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

¡Eso es todo!

Lea a continuación(Read next) : El sitio del navegador del módulo PowerShell(PowerShell Module Browser site) le permite buscar cmdlets y paquetes.



About the author

Soy ingeniero de software sénior y desarrollador de aplicaciones de imágenes y iPhone con más de 10 años de experiencia. Mis habilidades en hardware y software me hacen perfecto para cualquier proyecto de teléfono inteligente empresarial o de consumo. Tengo un conocimiento profundo de cómo crear imágenes de alta calidad y la capacidad de trabajar con todos los formatos de imagen diferentes. Además, estoy familiarizado con el desarrollo de Firefox e iOS.



Related posts