다음 샘플 스크립트를 사용자 지정한 후 사용하여 여러 Linux VM(가상 시스템)에서 Horizon Agent를 업그레이드할 수 있습니다.
이 스크립트에서는 Horizon Agent를 설치하기 전에 각 VM에 설치 관리자 tar ball을 업로드합니다. 업로드 작업은 시간이 오래 걸릴 수 있으며, 관련된 VM의 수가 많고 네트워크 속도가 느린 경우에는 특히 더 그렇습니다. 시간을 절약하려는 경우에는 SSH를 사용하는 스크립트를 실행하거나 파일을 업로드할 필요가 없도록 각 VM에서 사용할 수 있는 공유 위치에 설치 관리자 tar ball을 넣을 수 있습니다.
페이지 구분 없이 스크립트 내용을 복사한 후 붙여넣으려면 https://docs.vmware.com/kr/VMware-Horizon-7/index.html의 Horizon 7 설명서 페이지에서 이 항목의 HTML 버전을 사용하십시오.
스크립트 입력
이 스크립트는 Linux 데스크톱 배포를 위한 샘플 PowerCLI 스크립트의 입력 파일에 설명된 단일 입력 파일을 읽습니다. 이 스크립트는 또한 다음 정보를 대화형으로 요청합니다.
- Horizon Agent EULA(최종 사용자 라이센스 계약) 수락
- vCenter Server의 IP 주소
- vCenter Server의 관리자 로그인 이름
- vCenter Server의 관리자 암호
- ESXi 호스트의 관리자 로그인 이름
- ESXi 호스트의 관리자 암호
- Linux 게스트 운영 체제의 사용자 로그인 이름
- Linux 게스트 운영 체제의 사용자 암호
- Horizon Agent tar ball 경로
- 관리되는 VM으로 업그레이드
- 스마트 카드 리디렉션 기능 설치
스크립트 내용
<# 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
스크립트 실행
스크립트를 실행하면 다음 메시지가 표시됩니다.
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