次のサンプル スクリプトをカスタマイズして使用し、複数の Linux 仮想マシン (VM) でHorizon Agent をアップグレードできます。
このスクリプトでは、Horizon Agent のインストール前に、各仮想マシンにインストーラの tar ボールをアップロードします。アップロード タスクは、多くの仮想マシンが含まれ、ネットワークのスピードが遅い場合は特に時間がかかることがあります。時間を節約するには、SSH を使用するスクリプトを実行するか、インストーラの tar ボールを共有場所に配置して各仮想マシンで使用できるようにして、ファイルのアップロードを不要にすることができます。
改ページせずにスクリプトの内容をコピーして貼り付けるには、このトピックの HTML 版を使用します。HTML 版は https://docs.vmware.com/jp/VMware-Horizon-7/index.html にある Horizon 7 のドキュメントのページから入手できます。
スクリプト入力
このスクリプトは、Linux デスクトップを展開するサンプル PowerCLI スクリプトの入力ファイルで説明しているように 1 つの入力ファイルを読み取ります。また、このスクリプトは、次の情報をインタラクティブに確認します。
- Horizon Agent EULA(エンドユーザー使用許諾契約書)の承諾
- vCenter Server の IP アドレス
- vCenter Server 管理者のログイン名
- vCenter Server 管理者のパスワード
- ESXi ホスト管理者のログイン名
- ESXi ホスト管理者のパスワード
- Linux ゲスト OS のユーザー ログイン名
- Linux ゲスト OS のユーザー パスワード
- Horizon Agent tar ボールのパス
- 管理対象の仮想マシンへアップグレード
- スマートカード リダイレクト機能をインストール
スクリプトのコンテンツ
<# 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