パッチまたはエクステンションを ESX/ESXi ホストに適用する前に、テスト環境のホストに適用して、そのパッチおよびエクステンションをテストしてください。その後、Update Manager PowerCLI を使用して、テストしたベースラインを別の Update Manager サーバ インスタンスにエクスポートし、パッチおよびエクステンションをほかのホストに適用します。

Update Manager PowerCLI は、Windows PowerShell 上に構築されているコマンド ラインおよびスクリプト作成ツールであり、Update Manager を管理して自動化するための Cmdlet のセットを提供します。Update Manager PowerCLI のインストールおよび使用の詳細については、『VMware vSphere Update Manager PowerCLI Installation and Administration Guide』 を参照してください。

このワークフローでは、1 つの Update Manager インスタンスを使用してパッチをテストする方法、およびテストしたパッチが含まれるパッチ ベースラインを別の Update Manager インスタンスにエクスポートする方法について説明します。

  1. 固定ホスト パッチ ベースラインを作成します。

    テストするパッチが含まれる固定パッチ ベースラインを作成します。固定パッチ ベースラインは、新しいパッチが Update Manager のパッチ リポジトリにダウンロードされた場合、内容を変更しません。Update Manager の管理ビューの ベースラインおよびグループ タブから、固定パッチ ベースラインを作成できます。情報および詳細な手順については、固定パッチ ベースラインの作成 を参照してください。

  2. スキャンまたは修正するホストが含まれるコンテナ オブジェクトにパッチ ベースラインを添付します。

    コンテナ オブジェクトは、フォルダ、クラスタ、またはデータ センターです。Update Manager の準拠ビューから、ベースラインおよびベースライン グループをオブジェクトに添付します。vSphere オブジェクトへのベースラインおよびベースライン グループの添付の詳細については、オブジェクトへのベースラインおよびベースライン グループの添付 を参照してください。

  3. コンテナ オブジェクトをスキャンします。

    選択したコンテナ オブジェクトにベースラインを添付したあとで、スキャンしてコンテナのホストのコンプライアンス状態を確認する必要があります。選択したオブジェクトは、手動ですぐにスキャンを開始できます。ホストを手動でスキャンする方法の詳細な手順については、手動による ESX/ESXi ホストのスキャンの開始 を参照してください。

    また、スキャン タスクをスケジュール設定することによって、都合のよい時間にコンテナ オブジェクトのホストをスキャンできます。スキャンのスケジュール設定に関する情報および詳細な手順については、スキャンのスケジュール設定 を参照してください。

  4. Update Manager Client のコンプライアンス ビューに表示されるスキャン結果を確認します。

    スキャン結果の表示に関する詳細な手順、およびコンプライアンス状態に関する情報については、vSphere オブジェクトのスキャン結果とコンプライアンス状態の参照 を参照してください。

  5. (任意) 添付されるベースラインのパッチを、アップデートするホストにステージングします。

    パッチは、適用前にステージングし、Update Manager サーバからホストにコピーできます。パッチのステージングを行うと、修正時間が短縮され、修正中のホストのダウンタイムが最小化されます。パッチおよびエクステンションのホストへのステージングの詳細な手順については、ESX/ESXi ホストへのパッチおよびエクステンションのステージング を参照してください。

  6. コンテナ オブジェクトを修正します。

    非準拠のホストを修正し、添付されたベースラインに準拠するようにします。パッチ ベースラインまたはエクステンション ベースラインを基準にしたホストの修正の詳細については、パッチ ベースラインまたはエクステンション ベースラインを基準にしたホストの修正 を参照してください。

  7. パッチのテストに使用した Update Manager サーバからパッチ ベースラインをエクスポートし、別の Update Manager サーバにインポートします。

    Update Manager PowerCLI スクリプトを使用して、Update Manager サーバ間でパッチ ベースラインをエクスポートおよびインポートできます。次のサンプル スクリプトでは、$destinationServer 上にベースライン MyBaseline の複製を作成します。

    注:

    スクリプトは、固定パッチ ベースライン、動的パッチ ベースライン、およびエクステンション ベースラインで動作します。

    # $destinationServer = Connect-VIServer <ip_address_of_the_destination_server> # $sourceServer = Connect-VIServer <ip_address_of_the_source_server> # $baselines = Get-PatchBaseline MyBaseline -Server $sourceServer # ExportImportBaselines.ps1 $baselines $destinationServer Param([VMware.VumAutomation.Types.Baseline[]] $baselines, [VMware.VimAutomation.Types.VIServer[]]$destinationServers)
    
    $ConfirmPreference = 'None' $includePatches = @() $excludePatches = @()
    
    function ExtractPatchesFromServer([VMware.VumAutomation.Types.Patch[]]$patches, [VMware.VimAutomation.Types.VIServer]$destinationServer){ $result = @() if ($patches -ne $null){ foreach($patch in $patches){ $extractedPatches = Get-Patch -Server $destinationServer -SearchPhrase $patch.Name if ($extractedPatches -eq $null){ Write-Warning -Message "Patch '$($patch.Name)' is not available on the server $destinationServer" } else { $isFound = $false foreach ($newPatch in $extractedPatches){ if ($newPatch.IdByVendor -eq $patch.IdByVendor){ $result += $newPatch $isFound = $true } } if ($isFound -eq $false) { Write-Warning -Message "Patch '$($patch.Name)' with VendorId '$($patch.IdByVendor)' is not available on the server $destinationServer" } } } } return .$result; }
    
    function CreateStaticBaseline([VMware.VumAutomation.Types.Baseline]$baseline,[VMware.VimAutomation.Types.VIServer]$destinationServer){ $includePatches = ExtractPatchesFromServer $baseline.CurrentPatches $destinationServer if ($includePatches.Count -lt 1){ write-error "Static baseline '$($baseline.Name)' can't be imported.No one of the patches it contains are available on the server $destinationServer" } else { $command = 'New-PatchBaseline -Server $destinationServer -Name $baseline.Name -Description $baseline.Description -Static -TargetType $baseline.TargetType -IncludePatch $includePatches' if ($baseline.IsExtension) { $command += ' -Extension' }
    
    Invoke-Expression $command } }
    
    function CreateDynamicBaseline([VMware.VumAutomation.Types.Baseline]$baseline,[VMware.VimAutomation.Types.VIServer]$destinationServer) { if ($baseline.BaselineContentType -eq 'Dynamic'){ $command = 'New-PatchBaseline -Server $destinationServer -Name $baseline.Name -Description $baseline.Description -TargetType $baseline.TargetType -Dynamic -SearchPatchStartDate $baseline.SearchPatchStartDate - SearchPatchEndDate $baseline.SearchPatchEndDate -SearchPatchProduct $baseline.SearchPatchProduct -SearchPatchSeverity $baseline.SearchPatchSeverity -SearchPatchVendor $baseline.SearchPatchVendor' } elseif ($baseline.BaselineContentType -eq 'Both'){ $includePatches = ExtractPatchesFromServer $baseline.InclPatches $destinationServer $excludePatches = ExtractPatchesFromServer $baseline.ExclPatches $destinationServer
    
    $command = 'New-PatchBaseline -Server $destinationServer -Name $baseline.Name -Description $baseline.Description -TargetType $baseline.TargetType -Dynamic -SearchPatchStartDate $baseline.SearchPatchStartDate -SearchPatchEndDate $baseline.SearchPatchEndDate -SearchPatchProduct $baseline.SearchPatchProduct -SearchPatchSeverity $baseline.SearchPatchSeverity -SearchPatchVendor $baseline.SearchPatchVendor' if ($includePatches.Count -gt 0){ $command += ' -IncludePatch $includePatches' }
    
    if ($excludePatches.Count -gt 0){ $command += ' -ExcludePatch $excludePatches' } }
    
    #check for null because there is known issue for creating baseline with null SearchPatchPhrase if ($baseline.SearchPatchPhrase -ne $null){ $command += ' -SearchPatchPhrase $baseline.SearchPatchPhrase' }
    
    Invoke-Expression $command }
    
    foreach ($destinationServer in $destinationServers) { if ($baselines -eq $null) { Write-Error "The baselines parameter is null" } else { foreach($baseline in $baselines){ if ($baseline.GetType().FullName -eq 'VMware.VumAutomation.Types.PatchBaselineImpl'){ Write-Host "Import '" $baseline.Name "' to the server $destinationServer" if($baseline.BaselineContentType -eq 'Static'){ CreateStaticBaseline $baseline $destinationServer } else { CreateDynamicBaseline $baseline $destinationServer } } else { Write-Warning -Message "Baseline '$($baseline.Name)' is not patch baseline and will be skipped."} } } }
    

    これで、テストしたベースラインが別の Update Manager サーバにエクスポートされました。

  8. テストしたパッチ ベースラインをエクスポートした Update Manager サーバ インスタンスを使用することにより、パッチを ESX/ESXi ホストに適用します。