Puede personalizar y usar el siguiente script de ejemplo para actualizar Horizon Agent en varias máquinas virtuales Linux.

El script carga el archivo tar comprimido (.gz) del instalador en cada máquina virtual antes de instalar Horizon Agent. La tarea de carga puede requerir un tiempo considerable, sobre todo si hay un número considerable de máquinas virtuales y la velocidad de la red es baja. Para ahorrar tiempo, puede ejecutar el script que usa SSH o poner el archivo tar del instalador en una ubicación compartida que esté disponible para todas las máquinas virtuales, de modo que no sea necesario cargar el archivo.

Para copiar y pegar el contenido del script sin saltos de página, use la versión HTML de este tema, disponible en la página de documentación de Horizon 7 en https://docs.vmware.com/es/VMware-Horizon-7/index.html.

Entrada del script

Este script lee un archivo de entrada, que se describe en Archivo de entrada de los scripts PowerCLI de ejemplo para implementar escritorios Linux. Este script también solicita de manera interactiva la siguiente información:

  • Aceptación del acuerdo de licencia de usuario final (EULA) de Horizon Agent
  • Dirección IP de vCenter Server
  • Nombre de inicio de sesión de administrador para vCenter Server
  • Contraseña de administrador para vCenter Server
  • Nombre de inicio de sesión de administrador para el host ESXi
  • Contraseña de administrador para el host ESXi
  • Nombre de inicio de sesión de usuario para el sistema operativo invitado Linux
  • Contraseña de usuario para el sistema operativo invitado Linux
  • Ruta de acceso del archivo tar comprimido (.gz) de Horizon Agent
  • Actualizar a máquina virtual administrada
  • Instalar la función de redireccionamiento de tarjeta inteligente

Contenido del script

<#
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

Ejecución del script

Los siguientes mensajes son de una ejecución del script:

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