您可以自訂和使用下列範例指令碼,在多個 Linux 虛擬機器 (VM) 上執行作業。該作業包含開啟電源、關閉電源、關機、重新啟動和刪除虛擬機器。
此指令碼可從 vCenter Server 刪除虛擬機器,但無法從 View 刪除。
若要複製和貼上不含分頁符號的指令碼內容,請使用本主題的 HTML 版本,您可以從 Horizon7 文件頁面取得,網址是:https://www.vmware.com/support/pubs/view_pubs.html。
指令碼輸入
此指令碼會讀取一個輸入檔,在用於部署 Linux 桌面平台的範例 PowerCLI 指令碼輸入檔 中有加以描述。此指令碼也會互動地要求下列資訊:
- vCenter Server 的 IP 位址
- vCenter Server 的管理員登入名稱
- vCenter Server 的管理員密碼
- 要執行的動作,可以是開機、關機、關閉客體、重新啟動虛擬機器、重新啟動虛擬機器客體或刪除虛擬機器。
- 虛擬機器上各作業的等候間隔時間 (以秒為單位)。
指令碼內容
<# .DESCRIPTION The Tool supports: 1. Power off VMs 2. Power on VMs 3. Shutdown VMs 4. Restart VMs 5. Restart VM guest 6. Delete VMs from Disk .NOTES #> #--------------------- 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 IsVMExists ($VMExists) { Write-Host "Checking if the VM $VMExists Exists" [bool]$Exists = $false #Get all VMS and check if the VMs is already present in VC $listvm = Get-vm foreach ($lvm in $listvm) { if($VMExists -eq $lvm.Name ) { $Exists = $true Write-Host "$VMExists is Exist" } } return $Exists } function Delete_VM($VMToDelete) { Write-Host "Deleting VM $VMToDelete" Get-VM $VMToDelete | where { $_.PowerState –eq "PoweredOn" } | Stop-VM –confirm:$false Get-VM $VMToDelete | Remove-VM –DeleteFromDisk –confirm:$false } #------------------ Handle input --------------------- "-----------------------------------------------------" $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 "-----------------------------------------------------" $action = GetInput -prompt 'Select action: 1). Power On 2). Power Off 3) Shutdown VM Guest 4). Restart VM 5). Restart VM Guest 6). Delete VM' -IsPassword $false $sleepTime = GetInput -prompt 'Wait time (seconds) between each VM' -IsPassword $false "-----------------------------------------------------" [Console]::ForegroundColor = "Yellow" switch ($action) { 1 { "Your selection is 1). Power On" } 2 { "Your selection is 2). Power Off" } 3 { "Your selection is 3) Shutdown" } 4 { "Your selection is 4). Restart VM" } 5 { "Your selection is 5). Restart VM Guest" } 6 { "Your selection is 6). Delete VM" } default { "Invalid selection for action: $action" exit } } [Console]::ResetColor() $csvFile = '.\CloneVMs.csv' #check if file exists if (!(Test-Path $csvFile)) { write-host -ForeGroundColor Red "CSV File not found" exit } "-----------------------------------------------------" #--------------------- Main -------------------------- #Read input CSV file Disconnect-VIServer $vcAddress -Confirm:$false #Connect-VIServer $vcAddress -ErrorAction Stop -user $vcAdmin -password $vcPassword Connect-VIServer $vcAddress -user $vcAdmin -password $vcPassword $csvData = Import-CSV $csvFile foreach ($line in $csvData) { $VMName = $line.VMName switch ($action) { 1 { Get-VM $VMName | Start-VM -Confirm:$false } 2 { Get-VM $VMName | Stop-VM -Confirm:$false } 3 { Get-VM $VMName | Shutdown-VMGuest -Confirm:$false } 4 { Get-VM $VMName | Restart-VM -Confirm:$false } 5 { Get-VM $VMName | Restart-VMGuest -Confirm:$false } 6 { if (IsVMExists ($VMName)) { Delete_VM ($VMName) } } default{} } Start-Sleep -s $sleepTime } Disconnect-VIServer $vcAddress -Confirm:$false exit
指令碼執行
下列訊息是來自指令碼的執行:
PowerCLI C:\scripts> .\VMOperations.ps1 Your vCenter address: 10.117.44.17 Your vCenter admin user name: administrator Your vCenter admin user password: ******* -------------------------------------------------- Select action: 1). Power On 2). Power Off 3) Shutdown VM Guest 4). Restart VM 5). Restart VM Guest 6). Delete VM: 1 Wait time (seconds) between each VM: 20 -------------------------------------------------- Your selection is 6). Delete VM
針對開機、重新啟動虛擬機器和重新啟動虛擬機器客體作業,請指定虛擬機器之間的等候時間,至少 20 秒來避免開機風暴情況,該情況可能造成某些作業失敗。