Bevor Sie Patches oder Erweiterungen auf ESX/ESXi-Hosts anwenden, ist es ratsam, die Patches und Erweiterungen zu testen, indem Sie sie auf Hosts in einer Testumgebung anwenden. Anschließend können Sie mithilfe der Update Manager PowerCLI die getesteten Baselines auf eine andere Update Manager-Serverinstanz exportieren und die Patches und Erweiterungen auf andere Hosts anwenden.

Update Manager PowerCLI ist ein Befehlszeilen- und Skript-Tool, das auf Windows PowerShell aufbaut und einen Befehlssatz (so genannten „cmdlets“) zum Verwalten und Automatisieren des Update Manager-Servers bietet. Weitere Informationen zur Installation und Verwendung von Update Manager PowerCLI finden Sie im Installations- und Administratorhandbuch zu VMware vSphere Update Manager PowerCLI.

Dieser Workflow beschreibt das Testen von Patches mithilfe einer Update Manager-Instanz sowie das Exportieren der Patch-Baseline, die die getesteten Patches enthält, auf eine andere Update Manager-Instanz.

  1. Erstellen Sie feste Host-Patch-Baselines.

    Erstellen Sie feste Patch-Baselines, die die Patches enthalten, die Sie testen möchten. Feste Patch-Baselines ändern ihren Inhalt nicht, wenn neue Patches in das Update Manager-Patch-Repository heruntergeladen werden. Sie können eine feste Patch-Baseline von der Registerkarte Baselines und Gruppen in der Administratoransicht von Update Manager aus erstellen. Weitere Informationen und detaillierte Anweisungen finden Sie unter Erstellen einer festen Patch-Baseline.

  2. Hängen Sie die Patch-Baselines an ein Containerobjekt an, das die zu prüfenden bzw. zu standardisierenden Hosts enthält.

    Das Containerobjekt kann ein Ordner, Cluster oder Datencenter sein. Sie können Baselines und Baselinegruppen über die Ansicht „Übereinstimmung“ von Update Manager an Objekte anhängen. Weitere Informationen zum Anhängen von Baselines und Baselinegruppen an vSphere-Objekte finden Sie unter Anhängen von Baselines und Baselinegruppen an Objekte.

  3. Prüfen Sie das Containerobjekt.

    Nach dem Anhängen der Baselines an das ausgewählte Containerobjekt müssen Sie es prüfen, um den Übereinstimmungsstatus der Hosts im Container anzuzeigen. Sie können ausgewählte Objekte manuell prüfen, um sofort mit der Prüfung zu beginnen. Detaillierte Anweisungen zum manuellen Prüfen von Hosts finden Sie unter Manuelles Initiieren einer Prüfung von ESX/ESXi-Hosts.

    Zudem können Sie die Hosts im Containerobjekt zu einem passenden Zeitpunkt prüfen, indem Sie eine Prüfung planen. Weitere Informationen und detaillierte Anweisungen zum Planen einer Prüfung finden Sie unter Planen einer Prüfung.

  4. Überprüfen Sie die Prüfergebnisse, die in der Übereinstimmungsansicht des Update Manager-Clients angezeigt werden.

    Detaillierte Anweisungen zum Anzeigen von Prüfergebnissen sowie weitere Informationen zu Übereinstimmungsstatus finden Sie unter Anzeigen von Prüfergebnissen und Übereinstimmungsstatus für vSphere-Objekte.

  5. (Optional) Stellen Sie die Patches in den angehängten Baselines auf den Hosts bereit, die Sie aktualisieren möchten.

    Sie können die Patches bereitstellen und vom Update Manager-Server auf die Hosts kopieren, bevor Sie sie aufspielen. Die Bereitstellung von Patches beschleunigt die Standardisierung und minimiert die Ausfallzeit der Hosts während der Standardisierung. Detaillierte Anweisungen zum Bereitstellen von Patches und Erweiterungen auf Hosts finden Sie unter Bereitstellen von Patches und Erweiterungen für ESX/ESXi-Hosts.

  6. Standardisieren Sie das Containerobjekt.

    Standardisieren Sie die Hosts, die den Status „Nicht übereinstimmend“ aufweisen, damit sie mit den angehängten Baselines übereinstimmen. Weitere Informationen über das Standardisieren von Hosts anhand von Patch- oder Erweiterungs-Baselines finden Sie unter Standardisieren von Hosts anhand von Patch- und Erweiterungs-Baselines.

  7. Exportieren Sie die Patch-Baselines von dem Update Manager-Server, den Sie zum Testen der Patches verwendet haben, und importieren Sie sie auf einen anderen Update Manager-Server.

    Sie können mithilfe eines Update Manager PowerCLI-Skripts Patch-Baselines von einem auf einen anderen Update Manager-Server exportieren und importieren. Anhand des nachfolgenden Beispielskripts wird eine Kopie der Baseline MyBaseline auf dem Server $destinationServer erstellt.

    Anmerkung:

    Das Skript funktioniert sowohl für feste und dynamische Patch-Baselines als auch für Erweiterungs-Baselines.

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

    Sie haben jetzt die getestete Baseline auf einen anderen Update Manager-Server exportiert.

  8. Wenden Sie mithilfe der Update Manager-Serverinstanz, auf die Sie die getestete Patch-Baseline exportiert haben, die Patches auf Ihre ESX/ESXi-Hosts an.