次のサンプル スクリプトをカスタマイズして使用し、複数の Linux 仮想マシン (VM) で Horizon Agent をアップグレードできます。このスクリプトでは SSH を使用して、Linux 仮想マシンでコマンドを実行します。
改ページせずにスクリプトの内容をコピーして貼り付けるには、このトピックの HTML 版を使用します。HTML 版は https://www.vmware.com/support/pubs/view_pubs.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
}
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