WSUS と Microsoft Update カタログ

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012

Microsoft Update カタログは、企業ネットワークで配布できる更新プログラムのリストを提供するサービスです。 このカタログを使うと、Microsoft のソフトウェア更新プログラム、ドライバー、修正プログラムについての情報を検索できます。 WSUS には現在、Microsoft Update カタログから [更新プログラムのインポート] を実行するためのオプションが含まれています。 ただし、WSUS の "更新プログラムのインポート" アクションは、ActiveX を使って構築されますが、現在は非推奨となっています。 WSUS 内のこのインポート機能は、PowerShell スクリプトに置き換えられています。 このスクリプトを使うと、WSUS に 1 つの更新プログラムまたは複数の更新プログラムをインポートできます。 この記事では、カタログ、インポート スクリプト、スクリプトの使い方についての情報を提供します。

WSUS に更新プログラムをインポートするための前提条件

PowerShell スクリプトを使って WSUS に更新プログラムをインポートするには、次の前提条件が必要です。

  • WSUS 管理コンソールがインストールされているコンピューターは、WSUS サーバーであるかどうかにかかわらず、更新プログラムのインポートに使うことができます。
    • WSUS サーバーからインポートする場合は、WSUS 管理者グループまたはローカル管理者グループのメンバーであるアカウントを使います。
    • リモート コンピューターからインポートする場合は、WSUS 管理者グループのメンバーであると同時にローカル コンピューターでの管理アクセス許可を持つアカウントを使います。 リモート コンピューターは、ネットワーク経由で WSUS サーバーに接続できなくてはなりません。

Microsoft Update カタログ

Microsoft Update カタログを使うと、更新プログラムのさまざまなフィールドやカテゴリで検索できます。 これらの更新プログラムのフィールドには、次が含まれています。

  • 更新プログラムのタイトル
  • 説明
  • 適用対象の製品
  • 分類
  • ナレッジ ベース記事の番号 (KB1234567 形式)

ハードウェア更新プログラムまたはドライバーを検索する場合は、次のフィールドを検索することもできます。

  • ドライバー モデル
  • メーカー
  • クラス
  • PCI\VEN_14E4&DEV_1677&SUBSYS_01AD1028 などの 4 つの部分から構成されるハードウェア ID。

検索語句を追加して、検索範囲を絞り込むことができます。 特定の文字列を検索するには、二重引用符を使います。

Note

カタログでは、ダウンロード ボタンを使って、サイトから直接更新プログラムをダウンロードすることもできます。 ただし、この方法でダウンロードした更新プログラムは .MSU 形式です。 WSUS では、.MSU 形式の更新プログラムをインポートすることができません。 一般的に、このファイルの種類は、Windows Update スタンドアロン インストーラーDISM、またはその他の更新ツールで使われます。 一部のツールは、使用前に .MSU からファイルを抽出する必要があります。

PowerShell を使って WSUS に更新プログラムをインポートする

WSUS に更新プログラムをインポートするには、次の手順に従います。

  1. この記事から WSUS に更新プログラムをインポートするための PowerShell スクリプトをテキスト エディターにコピーして、「ImportUpdateToWSUS.ps1」という名前で保存します。 C:\temp など、アクセスしやすい場所を使います。

  2. ブラウザーで Microsoft Update カタログ (https://catalog.update.microsoft.com) を開きます。

  3. WSUS にインポートする更新プログラムを検索します。

  4. 返されたリストから、WSUS にインポートする更新プログラムを選択します。 更新プログラムの詳細ページが開きます。

  5. 更新プログラムの詳細ページの [コピー] ボタンを使って、UpdateID をコピーします。

  6. このスクリプトは、1 つの更新プログラムまたは複数の更新プログラムのインポートに使うことができます。

    • WSUS に複数の更新プログラムをインポートするには、インポートする更新プログラムごとに updateID をテキスト ファイルに貼り付けます。 1 行に 1 つの更新プログラム ID が表示されるリストを作成し、完了したらテキスト ファイルを保存します。 C:\temp\UpdateIDs.txt など、アクセスしやすい場所を使います。
    • 1 つの更新プログラムをインポートするには、1 つの updateID のみをコピーする必要があります。
  7. 更新プログラムをインポートするには、管理者として PowerShell コンソールを開き、必要なパラメーターを使って、次の構文でスクリプトを実行します。

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

    例 1: 既定のポートが使われている WSUS サーバーにサインインしている間に、次の構文を使って 1 つの更新プログラムをインポートします。

    .\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 経由の Secure Sockets Layer (SSL) を WSUS サーバーとの通信に使うかどうかを指定します。 このパラメーター名がパラメーター テストに存在している場合は、そのパラメーターで $true がテストされ、SSL を使って WSUS サーバーへの接続が行われます。それ以外の場合は、false です。 USeSSL パラメーターを使っている場合は、PortNumber を 443 または 8531 に設定します。

  • 必須: false

UpdateId: <string>
WSUS にインポートする更新プログラム ID を指定します。 このパラメーターは、1 つの更新プログラムをインポートする場合に必要です。 UpdateId は、UpdateIdFilePath と一緒に使うことができません。

  • 必須: スクリプト パラメーターとして指定した 1 つの updateID をインポートする場合は、true

UpdateIdFilePath: <string>
各行の update ID のリストを含むテキスト ファイルへのパスを指定します。 このパラメーターは、複数の更新プログラムをインポートする場合に必要です。 UpdateIdFilePath は、UpdateId と一緒に使うことができません。

  • 必須: テキスト ファイルを使って複数の更新プログラムをインポートする場合は、true

CommonParameters:
Verbose、Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、OutBuffer、PipelineVariable、OutVariable。 詳細については、「About CommonParameters」を参照してください

修正プログラムへのアクセスの制限

WSUS 管理者は、Microsoft Update カタログからダウンロードした修正プログラムへのアクセスの制限を検討する場合があります。 使用可能な修正プログラムを制限するには、次の手順に従います。

  1. インターネット インフォメーション サービス (IIS) マネージャー コンソールを開始します。
  2. WSUS 管理 Web サイトの [コンテンツ] ノードに移動します。
  3. [コンテンツ ホーム] ウィンドウで [認証] オプションをダブルクリックします。
  4. [匿名認証] を選び、右の [操作] ペインで [無効] を選びます。
  5. [Windows 認証] を選び、右の [操作] ペインで [有効] を選びます。
  6. WSUS 管理コンソールで、修正プログラムが必要なコンピューターの WSUS ターゲット グループを作成して、グループに追加します。 コンピューターとグループの詳細については、このガイドの「WSUS クライアント コンピューターと WSUS コンピューター グループを管理する」と WSUS 展開ガイドの「WSUS コンピューター グループを構成する」を参照してください。
  7. 修正プログラムのファイルをダウンロードします。
  8. これらのファイルのアクセス許可を設定して、それらのマシンのマシン アカウントだけに読み取りを許可します。 また、ネットワーク サービス アカウントにファイルへのフル アクセスを許可する必要があります。
  9. 手順 2 で作成した WSUS ターゲット グループの修正プログラムを承認します。

Note

WSUS サーバー クリーンアップ ウィザードを実行して、Microsoft Update カタログからインポートされた、未承認または拒否と設定されている更新プログラムを削除できます。 以前に WSUS システムから削除された更新プログラムは、再インポートできます。

さまざまな言語での更新プログラムのインポート

カタログには、複数の言語をサポートする更新プログラムが含まれています。

重要

WSUS サーバーでサポートされている言語と、インポートされた更新プログラムでサポートされている言語を一致させます。

WSUS サーバーが更新プログラムに含まれるすべての言語をサポートしていない場合、更新プログラムはクライアント コンピューターに展開されません。 複数の言語をサポートする更新プログラムが WSUS サーバーにダウンロードされていても、まだクライアント コンピューターに展開されていない場合に、管理者が更新プログラムに含まれる言語の 1 つを選択解除すると、更新プログラムはクライアントに展開されません。