WSUS und Importieren von Updates aus dem Microsoft Update Catalog

Quelle: learn.microsoft.com (Englisch)

Der Microsoft Update Catalog ist ein Dienst, der eine Liste von Updates bereitstellt, die über ein Unternehmensnetzwerk verteilt werden können. Sie können den Katalog verwenden, um Informationen über Microsoft-Software-Updates, Treiber und Hotfixes zu finden. WSUS enthält derzeit eine Option zum Importieren von Updates aus dem Microsoft Update Catalog. Die Aktion Updates importieren in WSUS wurde jedoch mit ActiveX erstellt, das jetzt veraltet ist. Diese Importfunktion in WSUS wurde durch ein PowerShell-Skript ersetzt. Mit dem Skript können Sie ein einzelnes Update oder mehrere Updates in WSUS importieren. Dieser Artikel enthält Informationen über den Katalog, das Importskript und die Verwendung des Skripts.

Verwenden Sie die folgenden Anweisungen, um Updates in WSUS zu importieren:

  1. Kopieren Sie das PowerShell-Skript zum Importieren von Updates in WSUS aus diesem Artikel in einen Texteditor, und speichern Sie es als ImportUpdatesIntoWSUS.ps1. Verwenden Sie einen Speicherort, auf den Sie leicht zugreifen können, z. B. "C:\temp".

  2. Öffnen Sie den Microsoft Update Catalog, https://catalog.update.microsoft.com, in einem Browser.

  3. Suchen Sie nach einem Update, das Sie in WSUS importieren möchten.

  4. Wählen Sie in der zurückgegebenen Liste das Update aus, das Sie in WSUS importieren möchten. Die Seite mit den Update-Details wird geöffnet.

  5. Verwenden Sie die Schaltfläche Kopieren auf der Update-Detailseite, um die UpdateID zu kopieren.

  6. Das Skript kann verwendet werden, um ein einzelnes Update oder mehrere Updates zu importieren.

    • Um mehrere Updates in WSUS zu importieren, fügen Sie die Update-IDs für jedes Update, das Sie importieren möchten, in eine Textdatei ein. Geben Sie eine Update-ID pro Zeile an und speichern Sie die Textdatei, wenn Sie fertig sind. Verwenden Sie einen Speicherort, auf den Sie leicht zugreifen können, z. B. "C:\temp\UpdateIDs.txt".
    • Um ein einzelnes Update zu importieren, müssen Sie nur die einzelne UpdateID kopieren.
  7. Um Updates zu importieren, öffnen Sie eine PowerShell-Konsole als Administrator und führen Sie das Skript mit der folgenden Syntax unter Verwendung aller erforderlichen Parameter aus:

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

    Beispiel 1: Während Sie an einem WSUS-Server angemeldet sind, der den Standardport verwendet, importieren Sie ein einzelnes Update mit der folgenden Syntax:

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

    Beispiel 2: Importieren Sie über einen Remotecomputer mehrere Updates in einen WSUS-Server unter Verwendung von SSL mit der folgenden Syntax:

    .\ImportUpdateToWSUS.ps1 -WsusServer WSUSServer.contoso.com -PortNumber 8531 -UseSsl -UpdateIdFilePath C:\temp\UpdateIDs.txt
  8. Die Aktualisierungsdateien für importierte Updates werden auf der Grundlage Ihrer Einstellungen für Update-Dateien heruntergeladen. Wenn Sie beispielsweise die Option Aktualisierungsdateien nur auf diesen Server herunterladen, wenn Updates genehmigt werden verwenden, werden die Aktualisierungsdateien heruntergeladen, wenn das Update genehmigt wird.

PowerShell-Skript zum Importieren von Updates 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. $_"
    }
}


0 Comments: