WSUS e il catalogo di Microsoft Update

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012

Microsoft Update Catalog è un servizio che fornisce un elenco di aggiornamenti che possono essere distribuiti in una rete aziendale. È possibile usare il catalogo per trovare informazioni sugli aggiornamenti software Microsoft, i driver e gli hotfix. WSUS include attualmente un'opzione per importare Aggiornamenti dal catalogo di Microsoft Update. Tuttavia, l'azione Importa Aggiornamenti in WSUS è stata compilata usando ActiveX, che è ora deprecata. Questa funzionalità di importazione in WSUS è stata sostituita con uno script di PowerShell. Lo script consente di importare un singolo aggiornamento o più aggiornamenti in WSUS. Questo articolo fornisce informazioni sul catalogo, sullo script di importazione e su come usare lo script.

Prerequisiti per l'importazione di aggiornamenti in WSUS

Per importare gli aggiornamenti in WSUS con lo script di PowerShell, sono necessari i prerequisiti seguenti:

  • Qualsiasi computer in cui è installata la console di amministrazione wsus, indipendentemente dal fatto che si tratti o meno di un server WSUS, può essere usato per importare gli aggiornamenti.
    • Quando si esegue l'importazione da un server WSUS, usare un account membro del gruppo WSUS Amministratori o del gruppo locale Amministratori.
    • Quando si importa da un computer remoto, usare un account membro del gruppo WSUS Amministratori e dispone di autorizzazioni amministrative nel computer locale. I computer remoti devono essere in grado di raggiungere il server WSUS in rete.

Microsoft Update Catalog

Microsoft Update Catalog consente di cercare vari campi e categorie di aggiornamento. Questi campi di aggiornamento includono:

  • Titolo aggiornato
  • Descrizione
  • Prodotti applicabili
  • Classificazioni
  • Numeri degli articoli della Knowledge Base nel formato di KB1234567

Quando si cercano gli aggiornamenti hardware o i driver, è anche possibile cercare i campi seguenti:

  • Modello di driver
  • Produttore
  • Classe
  • ID hardware in quattro parti, ad esempio PCI\VEN_14E4&DEV_1677&SUBSYS_01AD1028.

È possibile restringere l'ambito della ricerca aggiungendo termini di ricerca aggiuntivi. Per cercare una stringa specifica, usare virgolette doppie.

Nota

Il catalogo consente anche di scaricare gli aggiornamenti direttamente dal sito usando il pulsante di download. Tuttavia, gli aggiornamenti scaricati in questo modo sono in formato .MSU. WSUS non può importare gli aggiornamenti nel formato .MSU. Questo tipo di file è comunemente usato dal Programma di installazione autonomo di Windows Update, DISM o da altri strumenti di aggiornamento. Alcuni strumenti richiedono di estrarre i file da .MSU prima di poterli usare.

Importare gli aggiornamenti in WSUS con PowerShell

Usare le istruzioni seguenti per importare gli aggiornamenti in WSUS:

  1. Copiare lo Script di PowerShell per importare gli aggiornamenti in WSUS da questo articolo in un editor di testo e salvarlo come ImportUpdateToWSUS.ps1. Usare una posizione a cui è possibile accedere facilmente, ad esempio C:\temp.

  2. Aprire Microsoft Update Catalog, https://catalog.update.microsoft.com in un browser.

  3. Cercare un aggiornamento da importare in WSUS.

  4. Nell'elenco restituito, selezionare l'aggiornamento da importare in WSUS. Si apre la pagina dei dettagli dell'aggiornamento.

  5. Usare il pulsante Copia nella pagina dei dettagli dell'aggiornamento per copiare UpdateID.

  6. Lo script può essere usato per importare un singolo aggiornamento o più aggiornamenti.

    • Per importare più aggiornamenti in WSUS, incollare gli ID aggiornamento per ogni aggiornamento da importare in un file di testo. Elencare un ID aggiornamento per riga e quindi salvare il file di testo al termine. Usare una posizione a cui è possibile accedere facilmente, ad esempio C:\temp\UpdateIDs.txt.
    • Per importare un singolo aggiornamento, è sufficiente copiare il singolo updateID.
  7. Per importare gli aggiornamenti, aprire una console di PowerShell come amministratore ed eseguire lo script con la sintassi seguente usando i parametri necessari:

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

    Esempio 1: durante l'accesso a un server WSUS che usa la porta predefinita, importare un singolo aggiornamento usando la sintassi seguente:

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

    Esempio 2: uso di un computer remoto, importare più aggiornamenti in un server WSUS usando SSL con la sintassi seguente:

    .\ImportUpdateToWSUS.ps1 -WsusServer WSUSServer.contoso.com -PortNumber 8531 -UseSsl -UpdateIdFilePath C:\temp\UpdateIDs.txt
    
  8. I file di aggiornamento per gli aggiornamenti importati vengono scaricati in base alle impostazioni File aggiornamento. Ad esempio, se si usa l'opzione Scarica i file di aggiornamento in questo serer solo quando gli aggiornamenti vengono approvati, i file di aggiornamento vengono scaricati quando l'aggiornamento viene approvato. Per maggiori informazioni sulle opzioni per l'archiviazione degli aggiornamenti, consultare la sezione 1.3 Scegliere una strategia di archiviazione WSUS.

Script di PowerShell per importare gli aggiornamenti in 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. $_"
    }
}

Parametri di script

WsusServer: <string>
Specifica il nome di un server WSUS. Se non specificato, lo script si connette a localhost.

  • Obbligatorio: false
  • Valore predefinito: localhost

PortNumber: <Int32>
Specifica il numero di porta da usare per comunicare con il server WSUS upstream.

  • Obbligatorio: false
  • Valore predefinito: 8530
  • Valori consentiti: 80, 443, 8530, 8531

UseSsl: <switch>
Specifica se secure Sockets Layer (SSL) tramite HTTPS deve essere usato per comunicare con il server WSUS. Se questo nome di parametro è presente, il parametro verifica $true e la connessione viene stabilita al server WSUS usando SSL; in caso contrario, false. Quando si usa il parametro USeSSL, impostare PortNumber su 443 o 8531.

  • Obbligatorio: false

UpdateId: <string>
Specifica l'ID aggiornamento da importare in WSUS. Questo parametro è obbligatorio se si importa un singolo aggiornamento. UpdateId non può essere usato con UpdateIdFilePath.

  • Obbligatorio: true, durante l'importazione di un singolo updateID specificato come parametro di script

UpdateIdFilePath: <string>
specifica il percorso di un file di testo contenente un elenco di ID di aggiornamento in ogni riga. Questo parametro è obbligatorio se si importano aggiornamenti multipli. UpdateIdFilePath non può essere usato con UpdateId.

  • Obbligatorio: true, quando si usa un file di testo per importare più aggiornamenti

CommonParameters:
Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable e OutVariable. Per maggiori informazioni, vedere About_CommonParameters

Limitazione dell'accesso agli hotfix

Gli amministratori di WSUS potrebbero valutare la possibilità di limitare l'accesso agli hotfix scaricati dal Catalogo di Microsoft Update. Per limitare gli hotfix disponibili, seguire questa procedura:

  1. Avviare la console Internet Information Services (IIS) Manager.
  2. Passare al nodo Contenuto nel sito Web di Amministrazione WSUS.
  3. Nel riquadro Home contenuto, fare doppio clic sull'opzione Autenticazione.
  4. Selezionare Autenticazione anonima e selezionare Disabilita nel riquadro Azioni a destra.
  5. Selezionare Autenticazione Windows e selezionare Abilita nel riquadro Azioni a destra.
  6. Nella console di amministrazione di WSUS creare un gruppo di destinazione WSUS per i computer che necessitano dell'hotfix e aggiungerli al gruppo. Per maggiori informazioni su computer e gruppi, consultare la sezione Gestione di computer client WSUS e gruppi di computer WSUS in questa guida e Configurare i gruppi di computer WSUS nella guida alla distribuzione di WSUS.
  7. Scaricare i file per l'hotfix.
  8. Impostare le autorizzazioni di questi file in modo che solo gli account computer di tali computer possano leggerli. Sarà anche necessario consentire all'account del servizio di rete l'accesso completo ai file.
  9. Approvare l'hotfix per il gruppo di destinazione WSUS creato nel passaggio 2.

Nota

È possibile rimuovere gli aggiornamenti importati dal Catalogo di Microsoft Update impostati come Non approvati o Rifiutati, eseguendo la pulizia guidata server WSUS. È possibile importare nuovamente gli aggiornamenti che sono stati rimossi in precedenza dai sistemi WSUS.

Importazione di aggiornamenti in lingue diverse

Il catalogo include aggiornamenti che supportano più lingue.

Importante

Trova la corrispondenza con le lingue supportate dal server WSUS con le lingue supportate dagli aggiornamenti importati.

Se il server WSUS non supporta tutte le lingue incluse nell'aggiornamento, l'aggiornamento non verrà distribuito nei computer client. Se un aggiornamento che supporta più lingue è stato scaricato nel server WSUS ma non è ancora stato distribuito nei computer client e un amministratore deseleziona una delle lingue incluse nell'aggiornamento, l'aggiornamento non verrà distribuito ai client.