Puede personalizar y usar el siguiente script de ejemplo para cargar los archivos de configuración config y viewagent-custom.conf en varias máquinas virtuales Linux. Este script usa SSH para ejecutar comandos en las máquinas virtuales de Linux.
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://www.vmware.com/support/pubs/view_pubs.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:
- 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 usuario para la máquina virtual Linux
- Contraseña de usuario para la máquina virtual Linux
Contenido del script
<# Upload the configuration files config and viewagent-custom.conf to Linux VMs using SSH #> #------------------------- 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: $command" Invoke-Expression $command } #------------------------- Handle Input ------------------------- "-----------------------------------------------------" Check_SSH_Client -IsPlink $true -IsPSCP $true "-----------------------------------------------------" write-host -ForeGroundColor Blue 'Please ensure your config file and viewagent-custom.conf file are in current working directory' $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 "-----------------------------------------------------" $csvFile = '.\CloneVMs.csv' $setConfig = $false $setCustomConf = $false $config_File = "config" $customConf_File = "viewagent-custom.conf" #check if config file exists if(Test-Path $config_File) { $setConfig = $true write-host -ForeGroundColor Yellow '"config" file found' } else { write-host -ForeGroundColor Yellow '"config" file not found, skip it' } if(Test-Path $customConf_File) { $setCustomConf = $true write-host -ForeGroundColor Yellow '"viewagent-custom.conf" file found' } else { write-host -ForeGroundColor Yellow '"viewagent-custom.conf" file not found, skip it' } if (($setConfig -eq $false)-AND ($setCustomConf -eq $false)) { write-host -ForeGroundColor Red 'Both file not found, exit' exit } #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" #Try to delete the configuration file from home folder on destination VM $cmd = "rm -rf config viewagent-custom.conf" Write-Host "Run cmd '$cmd' in VM '$VMName' with user '$guestUser'" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd if ($setConfig) { Write-Host "Upload File '$config_File' to '$destFolder' of VM '$VMName' with user '$guestUser'" UploadFileViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -LocalPath $config_File -DestPath $destFolder $cmd = "sudo mv ./$config_File /etc/vmware/"; Write-Host "Move configuraton file: $cmd" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd } if ($setCustomConf) { Write-Host "Upload File '$customConf_File' to '$destFolder' of VM '$VMName' with user '$guestUser'" UploadFileViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -LocalPath $customConf_File -DestPath $destFolder $cmd = "sudo mv ./$customConf_File /etc/vmware/"; Write-Host "Move configuraton file: $cmd" RunCmdViaSSH -VM_Name $VMName -User $guestUser -Password $guestPassword -Cmd $cmd } } Disconnect-VIServer $vcAddress -Confirm:$false exit
Ejecución del script
Los siguientes mensajes son de una ejecución del script:
PowerCLI C:\scripts> .\UpdateOptionFile.ps1 -------------------------------------------------- Please ensure your config file and view-agent.conf file are in current working directory. 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: *******