다음 샘플 스크립트를 사용자 지정한 후 사용하여 여러 Linux VM(가상 시스템)에서 Horizon Agent를 업그레이드할 수 있습니다. 이 스크립트에서는 SSH를 사용하여 Linux VM에서 명령을 실행할 수 있습니다.
페이지 구분 없이 스크립트 내용을 복사한 후 붙여넣으려면 https://www.vmware.com/support/pubs/view_pubs.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 } function Check_SSH_Client { Param($IsPlink, $IsPSCP) if ($IsPlink) { if (Test-Path ".\plink.exe") { write-host -ForeGroundColor Yellow 'SSH client "plink.exe" found' } else { write-host -ForeGroundColor Red 'SSH client "plink.exe" not found, please download from its official web site' exit } } if ($IsPSCP) { if (Test-Path ".\pscp.exe") { write-host -ForeGroundColor Yellow 'SSH client "pscp.exe" found' } else { write-host -ForeGroundColor Red 'SSH client "pscp.exe" not found, please download from its official web site' exit } } } function RunCmdViaSSH { Param($VM_Name, $User, $Password, $Cmd, $returnOutput = $false) $VM= Get-VM $VM_Name $IP = $VM.guest.IPAddress[0] write-host "Run cmd on $VM_Name ($IP)" if($returnOutput) { $command = "echo yes | .\plink.exe -ssh -l $user -pw $password $IP " + '"' + $cmd +'"' $output = Invoke-Expression $command return $output } else { echo yes | .\plink.exe -ssh -l $user -pw $password $IP "$cmd" } } function UploadFileViaSSH { Param($VM_Name, $User, $Password, $LocalPath, $DestPath) $VM= Get-VM $VM_Name $IP = $VM.guest.IPAddress[0] $command = "echo yes | .\pscp.exe -l $User -pw $Password $LocalPath $IP" + ":" + "$DestPath" write-host "Upload file $LocalPath to VM $VM_Name with user $User" Invoke-Expression $command } #-----------------------------------------------------Handle input------------------------------------------------------------------- "-----------------------------------------------------" Check_SSH_Client -IsPlink $true -IsPSCP $true "-----------------------------------------------------" $acceptEULA = GetInput -prompt 'Accept Linux View 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 "-----------------------------------------------------" $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 View 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'" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd #Upload installer tar ball to Linux VM Write-Host "Upload File '$agentInstaller' to '$destFolder' of VM '$VMName' with user '$guestUser'" UploadFileViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -LocalPath $agentInstaller -DestPath $destFolder #Check the uploaded installer md5sum $cmd = "md5sum VMware-*-linux-*" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" $output = RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd -$returnOutput $true 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 -xzf VMware-*-linux-*.tar.gz" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd $cmd = "sudo setenforce 0"; Write-Host "Set the selinux to permissive mode: $cmd" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd $cmd = "sudo killall /usr/lib/vmware/viewagent/VMwareBlastServer/VMwareBlastServer" Write-Host "Stop VMwareBlastServer before upgrading: $cmd" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd #Run the upgrade command. $cmd = "cd VMware-*-linux-* && sudo ./install_viewagent.sh -r yes -A yes -m $installSmartcard -M $UpgradeToManagedVM" Write-Host "Run upgrade cmd in VM '$VMName' with user '$guestUser': $cmd" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd Write-Host -ForeGroundColor Yellow "Linux Agent installer will reboot the Linux VM after upgrade, and you may hit the ssh connection closed error message, which is expectation" } 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 VM guest OS user name: ViewUser 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