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.
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 administrador para el host ESXi
- Contraseña de administrador para el host ESXi
- 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 #> #------------------------- 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 ------------------------- "-----------------------------------------------------" 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 "-----------------------------------------------------" $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 "-----------------------------------------------------" $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'" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd if ($setConfig) { Write-Host "Upload File '$config_File' 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 $config_File $cmd = "sudo mv ./$config_File /etc/vmware/"; Write-Host "Move configuraton file: $cmd" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd } if ($setCustomConf) { Write-Host "Upload File '$customConf_File' 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 $customConf_File $cmd = "sudo mv ./$customConf_File /etc/vmware/"; Write-Host "Move configuraton file: $cmd" Invoke-VMScript -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $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 ESXi host admin user name, such as root: root Your ESXi host admin user password: ******* -------------------------------------------------- Your VM guest OS user name: ViewUser Your VM guest OS user password: *******