WSUS y el Catálogo de Microsoft Update

Se aplica a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2 y Windows Server 2012.

El Catálogo de Microsoft Update es un servicio que proporciona una lista de actualizaciones que se pueden distribuir a través de una red corporativa. Puede usar el catálogo para encontrar información sobre actualizaciones de software, controladores y revisiones de Microsoft. WSUS incluye actualmente una opción para importar actualizaciones desde el Catálogo de Microsoft Update, pero la acción para importar actualizaciones en WSUS se creó con ActiveX, que ahora está en desuso. Esta funcionalidad de importación en WSUS se ha reemplazado por un script de PowerShell que permite importar una o varias actualizaciones a WSUS. En este artículo se proporciona información sobre el Catálogo, el script de importación y cómo usar el script.

Requisitos previos para importar actualizaciones a WSUS

Los siguientes requisitos previos son necesarios para importar actualizaciones a WSUS con el script de PowerShell:

  • Para importar actualizaciones, se puede usar cualquier equipo que tenga instalada la consola administrativa de WSUS, tanto si es un servidor WSUS como si no.
    • Si va a importar desde un servidor WSUS, use una cuenta que sea miembro de los grupos de administradores o administradores locales de WSUS.
    • Si va a importar desde un equipo remoto, use una cuenta que sea miembro del grupo de administradores de WSUS y que tenga permisos administrativos en el equipo local. Los equipos remotos deben poder acceder al servidor WSUS a través de la red.

El Catálogo de Microsoft Update

El Catálogo de Microsoft Update permite buscar en varios campos y categorías de actualización, a saber:

  • Título de la actualización
  • Descripción
  • Productos aplicables
  • Clasificaciones
  • Números de artículos de la Knowledge Base con el formato KB1234567

Al buscar actualizaciones de hardware, o controladores, también se puede buscar en los siguientes campos:

  • Modelo de controlador
  • Fabricante
  • Clase
  • Identificador de hardware compuesto de cuatro partes, como PCI\VEN_14E4&DEV_1677&SUBSYS_01AD1028

Para acotar el ámbito de la búsqueda, use más términos de búsqueda. Para buscar una cadena específica, use comillas dobles.

Nota:

El Catálogo también permite descargar actualizaciones directamente desde el sitio mediante el botón de descarga, pero las actualizaciones descargadas de esta manera están en formato .MSU y WSUS no puede importar actualizaciones en formato .MSU. Este tipo de archivo lo suelen usar el instalador independiente de Windows Update, DISM u otras herramientas de actualizaciones. Algunas herramientas requieren extraer los archivos de .MSU para poder usarlos.

Importación de actualizaciones a WSUS mediante PowerShell

Use las siguientes instrucciones para importar actualizaciones a WSUS:

  1. Copie el script de PowerShell para importar actualizaciones a WSUS de este artículo en un editor de texto y guárdelo como ImportUpdateToWSUS.ps1. Use una ubicación a la que se pueda acceder fácilmente, como C:\temp.

  2. Abra el Catálogo de Microsoft Update, https://catalog.update.microsoft.com, en un explorador.

  3. Busque la actualización que quiera importar a WSUS.

  4. En la lista devuelta, seleccione la actualización que quiera importar a WSUS. Se abre la página de detalles de la actualización.

  5. Use el botón Copiar de la página de detalles de actualización para copiar el identificador de actualización.

  6. El script se puede usar para importar una o varias actualizaciones.

    • Para importar varias actualizaciones a WSUS, pegue los identificadores de actualización de cada una de ellas en un archivo de texto. Incluya un identificador de actualización por línea y guarde el archivo de texto cuando haya terminado. Use una ubicación a la que se pueda acceder fácilmente, como C:\temp\UpdateIDs.txt.
    • Para importar una sola actualización, solo tiene que copiar el identificador de actualización único.
  7. Para importar actualizaciones, abra una consola de PowerShell como administrador y ejecute el script con la siguiente sintaxis usando los parámetros necesarios:

    C:\temp\ImportUpdateToWSUS.ps1 [-WsusServer] <String> [-PortNumber] <Int32> [-UseSsl] [-UpdateId] <String> [-UpdateIdFilePath] <string> [<CommonParameters>]
    

    Ejemplo 1: habiendo iniciado sesión en un servidor WSUS que usa el puerto predeterminado, importe una sola actualización mediante la siguiente sintaxis:

    .\ImportUpdateToWSUS.ps1 -UpdateId 12345678-90ab-cdef-1234-567890abcdef
    

    Ejemplo 2: si se usa un equipo remoto, importe varias actualizaciones a un servidor WSUS mediante SSL con la siguiente sintaxis:

    .\ImportUpdateToWSUS.ps1 -WsusServer WSUSServer.contoso.com -PortNumber 8531 -UseSsl -UpdateIdFilePath C:\temp\UpdateIDs.txt
    
  8. Los archivos de actualización de las actualizaciones que se importan se descargan en función de la configuración de los archivos de actualización. Por ejemplo, si se usa la opción para descargar archivos de actualización en este servidor solo cuando las actualizaciones estén aprobadas, los archivos de actualización se descargan cuando la actualización se apruebe. Para obtener más información sobre las opciones para almacenar actualizaciones, consulte la sección 1.3 Elegir una estrategia de almacenamiento de WSUS.

Script de PowerShell para importar actualizaciones a WSUS

<#
.SYNOPSIS
Powershell script to import an update, or multiple updates into WSUS based on the UpdateID from the catalog.

.DESCRIPTION
This script takes user input and attempts to connect to the WSUS server.
Then it tries to import the update using the provided UpdateID from the catalog.

.INPUTS
The script takes WSUS server Name/IP, WSUS server port, SSL configuration option and UpdateID as input. UpdateID can be viewed and copied from the update details page for any update in the catalog, https://catalog.update.microsoft.com. 

.OUTPUTS
Writes logging information to standard output.

.EXAMPLE
# Use with remote server IP, port and SSL
.\ImportUpdateToWSUS.ps1 -WsusServer 127.0.0.1 -PortNumber 8531 -UseSsl -UpdateId 12345678-90ab-cdef-1234-567890abcdef

.EXAMPLE
# Use with remote server Name, port and SSL
.\ImportUpdateToWSUS.ps1 -WsusServer WSUSServer1.us.contoso.com -PortNumber 8531 -UseSsl -UpdateId 12345678-90ab-cdef-1234-567890abcdef

.EXAMPLE
# Use with remote server IP, defaultport and no SSL
.\ImportUpdateToWSUS.ps1 -WsusServer 127.0.0.1  -UpdateId 12345678-90ab-cdef-1234-567890abcdef

.EXAMPLE
# Use with localhost default port
.\ImportUpdateToWSUS.ps1 -UpdateId 12345678-90ab-cdef-1234-567890abcdef

.EXAMPLE
# Use with localhost default port, file with updateID's
.\ImportUpdateToWSUS.ps1 -UpdateIdFilePath .\file.txt


.NOTES  
# On error, try enabling TLS: https://learn.microsoft.com/mem/configmgr/core/plan-design/security/enable-tls-1-2-client

# Sample registry add for the WSUS server from command line. Restarts the WSUSService and IIS after adding:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /V SchUseStrongCrypto /T REG_DWORD /D 1

## Sample registry add for the WSUS server from PowerShell. Restarts WSUSService and IIS after adding:
$registryPath = "HKLM:\Software\Microsoft\.NETFramework\v4.0.30319"
$Name = "SchUseStrongCrypto"
$value = "1" 
if (!(Test-Path $registryPath)) {
    New-Item -Path $registryPath -Force | Out-Null
}
New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType DWORD -Force | Out-Null
Restart-Service WsusService, w3svc

# Update import logs/errors are under %ProgramFiles%\Update Services\LogFiles\SoftwareDistribution.log

#>

param(
    [Parameter(Mandatory = $false, HelpMessage = "Specifies the name of a WSUS server, if not specified connects to localhost")]
    # Specifies the name of a WSUS server, if not specified connects to localhost.
    [string]$WsusServer,

    [Parameter(Mandatory = $false, HelpMessage = "Specifies the port number to use to communicate with the upstream WSUS server, default is 8530")]
    # Specifies the port number to use to communicate with the upstream WSUS server, default is 8530.
    [ValidateSet("80", "443", "8530", "8531")]
    [int32]$PortNumber = 8530,

    [Parameter(Mandatory = $false, HelpMessage = "Specifies that the WSUS server should use Secure Sockets Layer (SSL) via HTTPS to communicate with an upstream server")]
    # Specifies that the WSUS server should use Secure Sockets Layer (SSL) via HTTPS to communicate with an upstream server.  
    [Switch]$UseSsl,

    [Parameter(Mandatory = $true, HelpMessage = "Specifies the update Id we should import to WSUS", ParameterSetName = "Single")]
    # Specifies the update Id we should import to WSUS
    [ValidateNotNullOrEmpty()]
    [String]$UpdateId,

    [Parameter(Mandatory = $true, HelpMessage = "Specifies path to a text file containing a list of update ID's on each line", ParameterSetName = "Multiple")]
    # Specifies path to a text file containing a list of update ID's on each line.
    [ValidateNotNullOrEmpty()]
    [String]$UpdateIdFilePath
)

Set-StrictMode -Version Latest

# set server options
$serverOptions = "Get-WsusServer"
if ($psBoundParameters.containsKey('WsusServer')) { $serverOptions += " -Name $WsusServer -PortNumber $PortNumber" }
if ($UseSsl) { $serverOptions += " -UseSsl" }

# empty updateID list
$updateList = @()

# get update id's
if ($UpdateIdFilePath) {
    if (Test-Path $UpdateIdFilePath) {
        foreach ($id in (Get-Content $UpdateIdFilePath)) {
            $updateList += $id.Trim()
        }
    }
    else {
        Write-Error "[$UpdateIdFilePath]: File not found"
		return
    }
}
else {
    $updateList = @($UpdateId)
}

# get WSUS server
Try {
    Write-Host "Attempting WSUS Connection using $serverOptions... " -NoNewline
    $server = invoke-expression $serverOptions
    Write-Host "Connection Successful"
}
Catch {
    Write-Error $_
    return
}

# empty file list
$FileList = @()

# call ImportUpdateFromCatalogSite on WSUS
foreach ($uid in $updateList) {
    Try {
        Write-Host "Attempting WSUS update import for Update ID: $uid... " -NoNewline
        $server.ImportUpdateFromCatalogSite($uid, $FileList)
        Write-Host "Import Successful"
    }
    Catch {
        Write-Error "Failed. $_"
    }
}

Parámetros de script

WsusServer: <string>
Especifica el nombre de un servidor WSUS. Si no se especifica, el script se conecta a localhost.

  • Obligatorio: false
  • Valor predeterminado: localhost

PortNumber: <int32>
Especifica el número de puerto que se va a usar para comunicarse con el servidor WSUS ascendente.

  • Obligatorio: false
  • Valor predeterminado: 8530
  • Valores permitidos: 80, 443, 8530, 8531

UseSsl: <switch>
Especifica si se debe usar Capa de sockets seguros (SSL) a través de HTTPS para comunicarse con el servidor WSUS. Si este nombre de parámetro está presente, el parámetro comprueba $true y se establece la conexión al servidor WSUS mediante SSL; de lo contrario, false. Al usar el parámetro USeSSL, establezca PortNumber en 443 o en 8531.

  • Obligatorio: false

UpdateId: <string>
Especifica el identificador de actualización que desea importar a WSUS. Este parámetro es necesario si va a importar una sola actualización. UpdateId no se puede usar con UpdateIdFilePath.

  • Obligatorio: true, si se importa un único UpdateID especificado como un parámetro de script.

UpdateIdFilePath: <string>
Especifica la ruta de acceso a un archivo de texto que contiene una lista de identificadores de actualización en cada línea. Este parámetro es necesario si va a importar varias actualizaciones. UpdateIdFilePath no se puede usar con UpdateId.

  • Obligatorio: true, si se usa un archivo de texto para importar varias actualizaciones.

CommonParameters:
Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable y OutVariable. Para obtener más información, consulte Acerca de CommonParameters.

Restricción del acceso a las revisiones

Los administradores de WSUS podrían considerar la posibilidad de restringir el acceso a las revisiones que han descargado del Catálogo de Microsoft Update. Para restringir las revisiones disponibles, siga estos pasos:

  1. Inicie la consola del Administrador de Internet Information Services (IIS).
  2. Vaya al nodo Contenido en el sitio web de Administración de WSUS.
  3. En el panel de inicio Contenido, haga doble clic en la opción Autenticación.
  4. Seleccione Autenticación anónima y seleccione Deshabilitar en el panel Acciones de la derecha.
  5. Seleccione Autenticación de Windows y seleccione Habilitar en el panel Acciones de la derecha.
  6. En la consola administrativa de WSUS, cree un grupo de destino de WSUS para los equipos que necesitan la revisión y agréguelos al grupo. Para obtener más información sobre equipos y grupos, vea Administración de equipos cliente de WSUS y grupos de equipos de WSUS en esta guía y Configuración de grupos de equipos WSUS en la guía de implementación de WSUS.
  7. Descargue los archivos de la revisión.
  8. Establezca los permisos de estos archivos de modo que solo las cuentas de equipo de esos equipos puedan leerlos. También deberá permitir que la cuenta de servicio de red tenga acceso total a los archivos.
  9. Apruebe la revisión para el grupo de destino de WSUS que se creó en el paso 2.

Nota:

Puede quitar las actualizaciones importadas desde el Catálogo de Microsoft Update que estén establecidas como No aprobadas o Rechazadas. Para ello, ejecute el Asistente para la limpieza del servidor WSUS. Puede volver a importar las actualizaciones que se hayan quitado previamente de los sistemas WSUS.

Importación de actualizaciones en diferentes idiomas

El Catálogo incluye actualizaciones que admiten varios idiomas.

Importante

Haga coincidir los idiomas que se admiten en el servidor WSUS con los que se admiten en las actualizaciones importadas.

Si el servidor WSUS no admite todos los idiomas que se incluyen en la actualización, la actualización no se implementará en los equipos cliente. Si se ha descargado en el servidor WSUS una actualización compatible con varios idiomas, pero antes de implementarla en los equipos cliente un administrador anula la selección de uno de los idiomas incluidos en la actualización, esta no se implementará en los clientes.