WSUS 和 Microsoft Update Catalog

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012

Microsoft Update Catalog 是一項服務,提供可於公司網路上散發的更新清單。 您可以使用目錄來尋找與 Microsoft 軟體更新、驅動程式和 Hotfix 相關的資訊。 WSUS 目前包含從 Microsoft Update Catalog 匯入更新的選項。 不過,在 WSUS 中的匯入更新動作是使用遭取代的 ActiveX 所建置。 這個在 WSUS 的匯入功能已被 PowerShell 指令碼所取代。 指令碼可讓您將單一更新或多個更新匯入 WSUS。 本文提供關於目錄、匯入指令碼及如何使用指令碼的資訊。

將更新匯入 WSUS 的必要條件

以下為使用 PowerShell 指令碼將更新匯入 WSUS 的必要條件:

  • 無論是否為 WSUS 伺服器,已安裝 WSUS 管理主控台的任何電腦都可以用於匯入更新。
    • 從 WSUS 伺服器匯入時,使用 WSUS Administrators 群組或本機 Administrators 群組成員的帳戶。
    • 從遠端電腦匯入時,使用屬於 WSUS Administrators 群組的成員,且在本機電腦上具有系統管理權限的帳戶。 遠端電腦必須能夠透過網路連線到 WSUS 伺服器。

Microsoft Update Catalog

Microsoft Update Catalog 可讓您搜尋各種更新欄位和類別。 這些更新欄位包括:

  • 更新標題
  • 描述
  • 適用的產品
  • 分類
  • 知識庫文章號碼,格式為 KB1234567

搜尋硬體更新或驅動程式時,您也可以搜尋下列欄位:

  • 驅動程式模型
  • 製造商
  • 類別
  • 四部分的硬體 ID,例如 PCI\VEN_14E4&DEV_1677&SUBSYS_01AD1028

您可以新增其他搜尋字詞來縮小搜尋範圍。 若要搜尋特定字串,請使用雙引號。

注意

目錄也可讓您使用 [下載] 按鈕直接從網站下載更新。 不過,以這種方式下載的更新具有以下格式:.MSU。 WSUS 無法匯入格式為 .MSU 的更新。 此檔案類型常為 Windows Update Standalone InstallerDISM 或其他更新工具所使用。 某些工具會要求您先從 .MSU 擷取檔案,才能使用它們。

使用 PowerShell 將更新匯入 WSUS

依照下列指示將更新匯入 WSUS:

  1. 從本文將可匯入更新至 WSUS 的 PowerShell 指令碼複製到文字編輯器,然後另存 為 ImportUpdateToWSUS.ps1。 使用您可以輕鬆存取的位置,例如 C:\temp

  2. 在瀏覽器中開啟 Microsoft Update Catalog https://catalog.update.microsoft.com

  3. 搜尋您要匯入 WSUS 的更新。

  4. 從傳回的清單中,選取您要匯入 WSUS 的更新。 更新詳細資料頁面開啟。

  5. 使用更新詳細資料頁面上的 [複製] 按鈕來複製 UpdateID

  6. 指令碼可以用來匯入單一更新或多個更新。

    • 若要將多個更新匯入 WSUS,請貼上您要匯入文字檔之每個更新的 updateIDs。 每行列出一個更新 ID,然後在完成時儲存文字檔。 使用您可以輕鬆存取的位置,例如 C:\temp\UpdateIDs.txt
    • 若要匯入單一更新,您只需要複製單一 updateID。
  7. 若要匯入更新,請以系統管理員的身分開啟 PowerShell 主控台,並使用任何必要的參數,以下列語法執行指令碼:

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

    範例 1:登入使用預設連接埠的 WSUS 伺服器時,使用下列語法匯入單一更新:

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

    範例 2:使用遠端電腦,以 SSL 和下列語法將多個更新匯入 WSUS 伺服器:

    .\ImportUpdateToWSUS.ps1 -WsusServer WSUSServer.contoso.com -PortNumber 8531 -UseSsl -UpdateIdFilePath C:\temp\UpdateIDs.txt
    
  8. 匯入更新的更新檔案會根據您的更新檔案設定下載。 例如,如果您使用選項 [僅在核准更新時下載更新檔案至此伺服器],那麼就會在核准更新時下載更新檔案。 如需儲存更新選項的詳細資訊,請參閱第 1.3 節選擇 WSUS 儲存策略

將更新匯入 WSUS 的 PowerShell 指令碼

<#
.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. $_"
    }
}

指令碼參數

WsusServer:<string>
指定 WSUS 伺服器的名稱。 如果未指定,指令碼會連接至 localhost。

  • 必要:false
  • 預設值:localhost

PortNumber:<Int32>
指定用於與上游 WSUS 伺服器進行通訊的連接埠號碼。

  • 必要:false
  • 預設值:8530
  • 允許的值:80、443、8530、8531

UseSsl:<switch>
指定透過 HTTPS 的安全通訊端層 (SSL) 是否應用於與 WSUS 伺服器進行通訊。 如果此參數名稱存在,參數測試為 $true,並使用 SSL 連線至 WSUS 伺服器,否則為 false。 使用 USeSSL 參數時,請將 PortNumber 設定為 443 或 8531。

  • 必要:false

UpdateId:<string>
指定您要匯入 WSUS 的更新 ID。 如果您正匯入單一更新,則需要此參數。 UpdateId 無法搭配 UpdateIdFilePath 使用。

  • 必要:true,當匯入指定為指令碼參數的單一 updateID 時

UpdateIdFilePath:<string>
指定包含每行更新 ID 清單之文字檔的路徑。 如果您正匯入多個更新,則需要此參數。 UpdateIdFilePath 無法搭配 UpdateId 使用。

  • 必要:true,當使用文字檔匯入多個更新時

CommonParameters
Verbose、Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、OutBuffer、PipelineVariable 和 OutVariable。 如需詳細資訊,請參閱 關於 CommonParameters

限制存取 Hotfix

WSUS 系統管理員可能會考慮限制存取他們已從 Microsoft Update Catalog 下載的 Hotfix。 若要限制可用的 Hotfix,請完成下列步驟:

  1. 啟動 [Internet Information Services (IIS) 管理員] 主控台。
  2. 瀏覽至 WSUS Administration 網站下方的 Content 節點。
  3. 在 [內容首頁] 窗格上,按兩下 [驗證] 選項。
  4. 選取 [匿名驗證],然後選取右側 [動作] 窗格中的 [停用]
  5. 選取 [Windows 驗證],然後選取右側 [動作] 窗格中的 [啟用]
  6. 在 WSUS 管理主控台中,為需要 Hotfix 的電腦建立 WSUS 目標群組,並將其新增至群組。 如需電腦和群組的詳細資訊,請參閱本指南中的管理 WSUS 用戶端電腦和 WSUS 電腦群組和 WSUS 部署指南中的設定 WSUS 電腦群組
  7. 下載 Hotfix 的檔案。
  8. 設定這些檔案的權限,以便讓只有這些電腦的電腦帳戶可以讀取檔案。 您也必須允許網路服務帳戶可完全存取檔案。
  9. 核准在步驟 2 中建立之 WSUS 目標群組的 Hotfix。

注意

您可以執行 WSUS 伺服器清理精靈移除從 Microsoft Update Catalog 匯入,並設定為 [未核准] 或 [已拒絕] 的更新。 您可以重新匯入之前已從 WSUS 系統移除的更新。

匯入不同語言的更新

目錄包含支援多種語言的更新。

重要

請將 WSUS 伺服器支援的語言搭配匯入更新支援的語言使用。

如果 WSUS 伺服器不支援更新中包含的所有語言,則不會將更新部署至用戶端電腦。 如果支援多種語言的更新已下載至 WSUS 伺服器,但尚未部署到用戶端電腦,且系統管理員取消選取更新中包含的其中一種語言,則該更新將不會部署到用戶端。