在vSphere 6.0的虛擬化作業環境中,想要批量創建大量虛擬機的方法有很多種,其中最簡單的做法就是創建一個.ps1的手稿程序文件,然后在PowerCLI命令行下執行即可,其屬性只要輸入類似以下范例即可,也就是依序選定ESXi主機的地址、新虛擬機的名稱、參考的模板名稱、數據存儲區名稱以及來賓操作系統的自定義規范名稱。可是這種做法您得輸入多個新虛擬機的信息。另一種方式則是搭配foreach {}循環命令的做法,這種做法只要在每一次創建大量虛擬機時,修改所要創建的虛擬機數量變量與前綴即可。

圖3 CSV文件范例
New-vm -vmhost ESX01.lab01.com -Name SVR-01-Template WinServer2012_R2_Template -Datastore E S X 0 1-d a t a s t o r e-OSCustomizationspec WinServer2012_R2_Template
但是,像這種搭配foreach {}循環命令的做法雖然方便,但卻無法明確選定每一個虛擬機各自的名稱、數據存儲區,以及所在的ESXi主機地址。在此建議您采用接下來要講解的第三種做法,那就是搭配CSV文件的方式來批量創建大量虛擬機,因為CSV的描述文件屬性在Excel中維護是非常容易的,并且不需要撰寫一個帶有foreach {}循環命令的復雜手稿程序。如圖3所示,筆者先以Excel創建一個新虛擬機清單,其中同樣包含了各項參數設置,比較特別的是我們還加入了CPU數量(NumCPU)與內存大小(MemoryGB)選定。完成編輯后,再另存為新的.csv類型文檔即可。
接下來請開啟PowerCLI命令界面,并連接登錄vCenter Server,然 后 便可以依序輸入下列的變量設置以及命令參數的執行,其中在New-VM命令之后的參數,便是用來選定對應的CSV文檔域名,例如 這 行 -Template $(Get-Template $_.Template)敘述,即是選定參照Template的域值。一旦成功執行后,將可以看到添加的虛擬機清單。
$C S V = "C:VMTemplate.csv"
$Description = "這是顧大俠以CSV文檔批量創建虛擬機的范例"
$VirtualMachines=Import-CSV $CSV
$VirtualMachines | %{New-VM -Name $_.VMName-Template $(Get-Template$_.Template) -VMHost$(Get-VMHost $_.VMHost)-D a t a s t o r e $(G e t-Datastore $_.Datastore)-OSCustomizationSpec$(Get-OSCustomizationSpec$_.OSCustomizationSpec)}
如果執行的過程之中出現了誤信息,極有可能是您所選定的CSV文件相關字段信息錯誤。另外,如果發生某一臺ESXi主機無法正常連接時,相對的虛擬機雖然無法成功創建,但系統仍會略過該錯誤,繼續創建下一個新的虛擬機。
如果您想要修改剛剛創建好的新虛擬機的某些屬性,例如CPU、內存以及描述說明,則可以直接執行下列命令。其中,-Confirm:$false參數設置表示省略確認提示。
$VirtualMachines |%{ Set-VM -VM $_.VMName-N u m C p u $_.N u m C p u-MemoryGB $_.MemoryGB-Description $Description-Confirm:$false}
再舉一個批量修改新虛擬機屬性的例子。我們可以將剛創建好的所有虛擬機,其虛擬網卡類型均修改為高效的vmxnet3,這樣,可以讓虛擬機的網絡傳輸速度最快高達10GB。如果想要關閉或啟用網絡喚醒功能,則只要設置WakeOneLan參數值為True或False即可。
$VirtualMachines | %{Get-VM -Name $_.VMName| Get-NetworkAdapter |Set-NetworkAdapter -Type vmxnet3 -Confirm:$false}
完成批量大量虛擬機的創建之后,您可以立即登錄到vSphere Web Client界面中來查看,便可以發現這些虛擬機僅完成創建并沒有啟動,因此,如果您想要批量啟動這些新的虛擬機,只要接著執行$VirtualMachines |%{ Start-VM -VM $_.VMName-Confirm:$false }命令參數,即可一次完成這些新虛擬機的啟動。
當我們在服務端的命令控制臺中,以管理員身分執行vim-cmd vmsvc/destroy vmid命令參數來刪除選定的虛擬機時,便會發現虛擬機雖然已經刪除,但在vSphere Web Client中 會 出 現orphaned字眼,而在傳統的vSphere Client界面中則不會有這現象。解決的方法在過去必須先創建一個虛擬機文件夾,然后將orphaned的虛擬機移動至此文件夾之后,再刪除整個文件夾。如今已經不用這么麻煩,只要在它的節點上按下鼠標右鍵,并點擊“所有Virtual Infrastructure操作→從清單中移除”即可。
盡管全新PowerCLI命令的使用相較于傳統的CLI命令增加了彈性,但對于已熟悉傳統CLI命令的管理人員來說,它仍有一些使用的優點,像是在一些管理操作的命令參數上就會比PowerCLI來得簡單。舉例來說,如果您想要移除VM1虛擬機中的所有快照,在PowerCLI命令的使用上就必須執行Get-VM -name VM1 | Get-Snapshot |Remove-Snapshot。若在傳統CLI的命令參數使用上就會簡短許多,只要執行vim-cmd vmsvc/snapshot.remove VM1的ID即可。PowerCLI與傳統CLI命令用法的比對如表1所示。

圖4 取得特定虛擬機已運行的時間

表1 vSphere兩種命令語法比對
在如圖4所示的范例中,則是通過傳統CLI的vim-cmd命令參數,在ESXi服務端命令控制臺中先執行vim-cmd vmsvc/getallvms命令來取得所有虛擬機清單,然后再執行vim-cmd vmsvc/get.summary 19 |grep uptimeSeconds命令參數,來查詢VMID為19的虛擬機目前已運行的時間(單位=秒)。
無論虛擬化平臺的技術在未來會發展到何種程度,GUI操作界面與命令控制臺的使用,始終是相輔相成缺一不可的。讓我們看看在Windows的窗口世界中,雖然是以GUI界面的友善設計為其根本,但命令提示字符技術的發展在近五年以來卻不斷向上發展,其中Windows PowerShell的應用更是標榜比Linux的Shell更強更好用,原因就是它必須滿足不同應用層次的用戶,這包括一般消費者、信息工作者以及IT專業人士。
相對的,在Linux的開源世界中,早已不再強調命令工具有多么強大,反而致力于窗口界面的友善設計來發展,且不管是哪一個Linux的發行版,都希望能夠持續發展出有別于Windows的窗口桌面設計概念。如今已有許多成功案例,其中,VMware vSphere便是在這個領域中,發展相當成功的虛擬化平臺。