Sie können das nachfolgend aufgeführte Beispielskript für ein Upgrade von Horizon Agent auf mehreren virtuellen Linux-Maschinen (VMs) anpassen und anwenden.
Dieses Skript lädt das TAR-Archiv des Installationsprogramms auf jede VM hoch, bevor Horizon Agent installiert wird. Die Upload-Aufgabe kann sehr viel Zeit in Anspruch nehmen, vor allem wenn eine große Anzahl von VMs beteiligt und die Netzwerkgeschwindigkeit langsam ist. Um Zeit zu sparen, können Sie das Skript ausführen, das SSH verwendet, oder das TAR-Archiv des Installationsprogramms an einem freigegebenen Speicherort ablegen, der für jede VM verfügbar ist, wodurch das Hochladen der Datei nicht erforderlich ist.
Für das Kopieren und Einfügen des Skriptinhalts ohne Seitenumbrüche verwenden Sie die HTML-Version dieses Themas, die auf der Dokumentationsseite von Horizon 7 unter https://docs.vmware.com/de/VMware-Horizon-7/index.html verfügbar ist.
Skripteingabe
Dieses Skript liest eine Eingabedatei, die im Kapitel Eingabedatei für die PowerCLI-Beispielskripts zur Bereitstellung von Linux-Desktops beschrieben ist. Es gibt verschiedene Eingabeaufforderungen für die folgenden Informationen aus:
- Annahme der Horizon Agent-Endbenutzerlizenzvereinbarung (EULA)
- IP-Adresse von vCenter Server
- Anmeldename des Administrators für vCenter Server
- Kennwort des Administrators für vCenter Server
- Anmeldename des Administrators für den ESXi-Host
- Kennwort des Administrators für den ESXi-Host
- Anmeldename des Benutzers für das Linux-Gastbetriebssystem
- Kennwort des Benutzers für das Linux-Gastbetriebssystem
- Horizon Agent-TAR-Archiv-Pfad
- Aktualisieren auf verwaltete VM
- Installieren der Smartcard-Umleitungsfunktion
Skriptinhalt
<# Upload the Linux Agent installer tar ball and re-install #> #-----------------------------------------------------Functions------------------------------------------------------------------ function GetInput { Param($prompt, $IsPassword = $false) $prompt = $prompt + ": " Write-Host $prompt -NoNewLine [Console]::ForegroundColor = "Blue" if ($IsPassword) { $input = Read-Host -AsSecureString $input = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($input)) } else { $input = Read-Host } [Console]::ResetColor() return $input } #-----------------------------------------------------Handle input------------------------------------------------------------------- "-----------------------------------------------------" $acceptEULA = GetInput -prompt 'Accept Linux Horizon Agent EULA in tar bundle ("yes" or "no")' -IsPassword $false if ($acceptEULA -ne "yes") { write-host -ForeGroundColor Red "You need accept the EULA with 'yes'(case sensitive)" exit } $vcAddress = GetInput -prompt "Your vCenter address" -IsPassword $false $vcAdmin = GetInput -prompt "Your vCenter admin user name" -IsPassword $false $vcPassword = GetInput -prompt "Your vCenter admin user password" -IsPassword $true "-----------------------------------------------------" $hostAdmin = GetInput -prompt 'Your ESXi host admin user name, such as root' -IsPassword $false $hostPassword = GetInput -prompt "Your ESXi admin user password" -IsPassword $true "-----------------------------------------------------" $guestUser = GetInput -prompt 'Your VM guest OS user name' -IsPassword $false $guestPassword = GetInput -prompt 'Your VM guest OS user password' -IsPassword $true "-----------------------------------------------------" $agentInstaller = GetInput -prompt 'Type the Horizon Agent tar ball path' -IsPassword $false "-----------------------------------------------------" $UpgradeToManagedVM = GetInput -prompt 'Upgrade to managed VM ("yes" or "no")' -IsPassword $false if (($UpgradeToManagedVM -ne "yes") -AND $UpgradeToManagedVM -ne "no") { write-host -ForeGroundColor Red "You need select 'yes' or 'no'(case sensitive)" exit } $installSmartcard = GetInput -prompt 'Install the Smartcard redirection feature ("yes" or "no")' -IsPassword $false if (($installSmartcard -ne "yes") -AND $installSmartcard -ne "no") { write-host -ForeGroundColor Red "You need select 'yes' or 'no'(case sensitive)" exit } "-----------------------------------------------------" #$csvFile = Read-Host 'Csv File ' $csvFile = '.\CloneVMs.csv' #check if file exists if (!(Test-Path $agentInstaller)) { write-host -ForeGroundColor Red "installer File not found" exit } #check if file exists if (!(Test-Path $csvFile)) { write-host -ForeGroundColor Red "CSV File not found" exit } #-----------------------------------------------------Functions------------------------------------------------------------------ function GetSourceInstallerMD5() { $agentInstallerPath = Convert-Path $agentInstaller; $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider; $md5HashWithFormat = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($agentInstallerPath))); $md5Hash = ($md5HashWithFormat.replace("-","")).ToLower(); return $md5Hash; } #-----------------------------------------------------Main------------------------------------------------------------------ #Get installer MD5Sum $installerMD5Hash = GetSourceInstallerMD5; #Connect to vCenter $VC_Conn_State = Connect-VIServer $vcAddress -user $vcAdmin -password $vcPassword if([string]::IsNullOrEmpty($VC_Conn_State)) { Write-Host 'Exit since failed to login vCenter' exit } else { Write-Host 'vCenter is connected' } #Read input CSV file $csvData = Import-CSV $csvFile $destFolder = "/home/$guestUser/" #Handle VMs one by one foreach ($line in $csvData) { "`n-----------------------------------------------------" $VMName = $line.VMName write-host -ForeGroundColor Yellow "VM: $VMName`n" $cmd = "rm -rf VMware-*-linux-*" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd #Upload installer tar ball to Linux VM Write-Host "Upload File '$agentInstaller' to '$destFolder' of VM '$VMName' with user '$guestUser'" Copy-VMGuestFile -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -LocalToGuest -Destination $destFolder -Source $agentInstaller #Check the uploaded installer md5sum $cmd = "md5sum VMware-*-linux-*" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" $output = Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd if($output.Contains($installerMD5Hash)) { Write-Host $VMName": Uploaded installer's MD5Sum matches the local installer's MD5Sum"; Write-Host $VMName": Extract the installer and do installation"; $cmd = "tar -xzvf VMware-*-linux-*.tar.gz" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd $cmd = "sudo setenforce 0"; Write-Host "Set the selinux to permissive mode: $cmd" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd $cmd = "sudo killall /usr/lib/vmware/viewagent/VMwareBlastServer/VMwareBlastServer" Write-Host "Stop VMwareBlastServer before upgrading: $cmd" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd #Run the upgrade command. $cmd = "cd VMware-*-linux-* && sudo ./install_viewagent.sh -A yes -m $installSmartcard -M $UpgradeToManagedVM" Write-Host "Run upgrade cmd in VM '$VMName' with user '$guestUser': $cmd" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd $cmd = "sudo shutdown -r +1&" Write-Host "Reboot to apply the Horizon Agent installation" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd } else { Write-Host $VMName": Uploaded installer's MD5Sum does NOT match the local installer's MD5Sum"; Write-Host $VMName": Skip the installation. Please check your network and VMware Tools status"; exit; } } Disconnect-VIServer $vcAddress -Confirm:$false exit
Skriptausführung
Die folgenden Meldungen resultieren aus einer Ausführung des Skripts:
PowerCLI C:\scripts> .\InstallAgent.ps1 -------------------------------------------------- Accept Linux Horizon Agent EULA in tar bundle ("yes" or "no"): yes Your vCenter address: 10.117.44.17 Your vCenter admin user name: administrator Your vCenter admin user password: ******* -------------------------------------------------- Your ESXi host admin user name, such as root: root Your ESXi host admin user password: ******* -------------------------------------------------- Your VM guest OS user name: HorizonUser Your VM guest OS user password: ******* -------------------------------------------------- Type the Horizon Agent tar ball path. Please take care of the installer arch: .\VMware-viewagent-linux-x86_64-x.y.z-1234567.tar.gz ------------------------------------------------------------------------------------------------------ Upgrade to managed VM ("yes" or "no"): yes Install the Smartcard redirection feature ("yes" or "no"): no