在前面的內(nèi)容中,無(wú)論是創(chuàng)建“完全克隆”的虛擬機(jī),還是“克隆鏈接”的虛擬機(jī),都是在VMware Workstation的圖形界面中以向?qū)У姆绞絼?chuàng)建的,每次創(chuàng)建一個(gè)虛擬機(jī)都需要多個(gè)步驟才能完成。在創(chuàng)建的虛擬機(jī)數(shù)量有限的情況下,使用圖形界面創(chuàng)建虛擬機(jī)還可以接受,如果需要批量創(chuàng)建多臺(tái)虛擬機(jī),例如創(chuàng)建幾十臺(tái)、上百臺(tái)甚至上千臺(tái)虛擬機(jī)時(shí),反復(fù)的操作會(huì)讓人“崩潰”。
本文介紹采用VMware提供的命令行工具VMRun.exe并通過(guò)編寫批處理腳本的方式,實(shí)現(xiàn)虛擬機(jī)的批量創(chuàng)建、批量啟動(dòng)與批量關(guān)機(jī)。
VMRun.exe是VMware Workstation中提供的一個(gè)命令行接口程序,可以實(shí)現(xiàn)對(duì)VMware Workstation虛擬機(jī)或遠(yuǎn)程VMware ESXi虛擬機(jī)的大多數(shù)管理功能,例如虛擬機(jī)的電源管理(開機(jī)、關(guān)機(jī)、休眠、重啟、暫停、恢復(fù))、快照管理(創(chuàng)建快照、列出快照、刪除快照、恢復(fù)到指定快照點(diǎn))、客戶機(jī)命令管理(執(zhí)行客戶機(jī)中程序、添加管理共享文件夾、列表客戶機(jī)進(jìn)程、清除客戶機(jī)進(jìn)程)、注冊(cè)虛擬機(jī)、刪除虛擬機(jī)、克隆虛擬機(jī)等功能??梢栽诿钚兄袌?zhí)行該程序。在命令窗口中進(jìn)入C:Program Files(x86)VMwareVMware Workstation文件夾,執(zhí)行vmrun /?可以查看幫助參數(shù)。vmrun的命令格式如下:
vmrun 認(rèn)證標(biāo)志 命令參數(shù)
其中“認(rèn)證標(biāo)志(AUTHENTICATION-FLAGS)”包括以下選項(xiàng)。
VMRun的命令包括POWER(電 源)、SNAPSHOT(快 照)、GUEST OS(客戶機(jī)操作系統(tǒng))、GENERAL(常規(guī))等幾項(xiàng)命令,每個(gè)命令又有參數(shù)及可選參數(shù)。下面介紹主要的VMRun命令。
為了在命令提示窗口中的任何位置執(zhí)行VMRun.exe命令,你可以將VMRun.exe程序所在的路徑添加到系統(tǒng)的PATH路徑中。
1.進(jìn)入“系統(tǒng)屬性”,在“高級(jí)”選項(xiàng)卡中單擊“環(huán)境變量”按鈕(如圖5)。
圖5 環(huán)境變量
圖6 查看path路徑
2.在“環(huán)境變量”中的“系統(tǒng)變量”中找到Path,單擊“編輯”按鈕,在“變量值”后面先輸入一個(gè)英文的分 號(hào)( :),然 后 將 VMRun.exe程序的路徑(C:Program Files (x86)VMwareVMware Workstation )“粘貼”到此。然后單擊“確定”按鈕完成設(shè)置。
說(shuō)明:當(dāng)前示例計(jì)算機(jī)添加后的環(huán)境變量如下:
你可以進(jìn)入命令提示窗口之后通過(guò)執(zhí)行path命令查看這一參數(shù)(如圖6)。
(1)POWER COMMANDS(電源命令)
POWER COMMANDS包 括start(啟動(dòng)虛擬機(jī)或Team)、stop(關(guān)閉虛擬機(jī)或Team)、reset(虛擬機(jī)復(fù)位命令,可選參數(shù)為hard或soft)、suspend(休 眠)、pause(暫停,暫停虛擬機(jī)的運(yùn)行)、unpause(從暫?;謴?fù))。這些命令的參數(shù)為“Path to vmx file”,即包括詳細(xì)路徑的虛擬機(jī)配置文件。
例如,在一臺(tái)Windows主機(jī)中(當(dāng)前安裝了VMware Workstation),啟動(dòng)一個(gè)虛擬機(jī)的命令如下。
vmrun -T ws start"c:my VMsmyVM.vmx"
在安裝了VMware Workstation的Windows主機(jī)中,啟動(dòng)遠(yuǎn)程ESXi主機(jī)中一個(gè)虛擬機(jī)的命令如下。
vmrun -T esx -h https://esxi主機(jī)的IP地址或域名/sdk -u hostUser-p hostPassword stop"[storage1] vm/myVM.vmx"
如果要停止、重啟、休眠虛擬機(jī),只要將這start換成stop、reset、suspend即可。
如果要在Mac計(jì)算機(jī)上安裝了VMware Fusion,想啟動(dòng)其中的虛擬機(jī),則需要如下的命令。
圖7 命令執(zhí)行結(jié)果
(2)SNAPSHOT COMMANDS(快照命令)
使用snapshot命令,可以管理指定虛擬機(jī)的快照,包 括 listSnapshots(列出指定虛擬機(jī)的快照,可選參數(shù)showTree,以樹型方 式 顯 示)、snapshot(為指定虛擬機(jī)創(chuàng)建快照)、deleteSnapshot(刪除快照)、revertToSnapshot(恢復(fù)到指定快照)。
例如,在一臺(tái)安裝了VMware Workstation的Windows主機(jī)中,有一臺(tái)Windows Server 2008 R2的虛擬機(jī),這個(gè)虛擬機(jī)有多個(gè)快照。
如果要顯示該虛擬機(jī)的所有快照,可以執(zhí)行如下命令:
如果要以樹型方式顯示快照,則在vmx文件后面添加showtree參數(shù)。
vmrun -tws listsnapshots "F:VM_TempWS08R2-SP1數(shù)據(jù)中心 版WS08R2-SP1.vmx"showtree
該命令執(zhí)行的結(jié)果如圖7所示。
(3)GUEST OS COMMANDS(客戶機(jī)系統(tǒng)命令)
使用GUESTOS COMMANDS命令參數(shù),可以檢查指定虛擬機(jī)中文件(fileExistsInGuest)或目錄(directoryExistsIn Guest)是否存在、設(shè)置共享文件夾(setSharedFolder State)、刪除共享文件夾(removeSharedFolder)、啟動(dòng)虛擬機(jī)中指定的程序(runProgramInGuest)、列 出虛擬機(jī)中執(zhí)行程序進(jìn)程、在虛擬機(jī)與主機(jī)之間拷貝文件等。
runProgramInGuest——在客戶機(jī)中執(zhí)行程序,必須參數(shù)為包括詳細(xì)路徑的vmx文件,可選參數(shù)為-noWait、-activeWindow、-interactive。
例如,當(dāng)前有一臺(tái)Windows XP的虛擬機(jī)正在運(yùn)行(這個(gè)虛擬機(jī)的配置文件為 c:VMSXPXP.vmx)。
圖8 列出所有進(jìn)程
當(dāng)前虛擬機(jī)的登錄賬戶為L(zhǎng)inna,密碼為1234。
如果要在主機(jī)啟動(dòng)這個(gè)虛擬機(jī)中的“計(jì)算器”程序,則可以執(zhí)行如下命令:
vmrun -T ws -gu linna-gp 1234 runProgramInGuest"C:VMSXpXP.vmx" "C:windowssystem32calc.exe"
當(dāng)虛擬機(jī)中的“計(jì)算器”程序退出時(shí),命令提示符中命令行才會(huì)返回到C:提示符。如果不想讓執(zhí)行的程序“退出”后才返回到命令行,則可以添加-noWait。
如果要檢查虛擬機(jī)C: emp中是否存在test.txt文件,則執(zhí)行:
如果要想檢查C: emp文件夾是否存在,則執(zhí)行:
如果要執(zhí)行腳本(腳本程序?yàn)镃:perlperl.exe,腳本文件在根目錄script.pl),格式如下 :
如果要禁用共享文件夾(以C:VMSXpXP.vmx為例,下同),則執(zhí)行:
如果要為指定虛擬機(jī)啟用共享文件夾,則執(zhí)行:
將主機(jī)D盤根目錄為指定虛擬機(jī)設(shè)置為共享文件夾,設(shè)置共享名為DDDD,命令如下:
如果要列出虛擬機(jī)中所有進(jìn)程,則執(zhí)行如下命令:
如圖8所示。
如果要?dú)⒊硞€(gè)進(jìn)程(如圖8中的“記事本”進(jìn)程,該進(jìn)程ID為636),則執(zhí)行:
可以在主機(jī)與虛擬機(jī)之間拷貝文件,從主機(jī)到虛擬機(jī)拷貝文件命令為CopyFileFromHostToGuest,從虛擬機(jī)到主機(jī)拷貝文件命令為CopyFileFromGuestToHost。例如,如果要將主機(jī)g: emp中的vncviewer-6.0.2.exe文件復(fù)制到虛擬機(jī)的C盤temp文件夾,命名為vnc2.exe,命令如下:
如果要復(fù)制的程序是帶中文或空格,則需要用英文雙引號(hào)包括,例如:
如果要從虛擬機(jī)復(fù)制到主機(jī),則命令如下(從虛擬機(jī)C盤temp復(fù)制RAR3.51官方版.exe到G盤temp中命名為rar.exe。
如果要列出所有正在運(yùn)行的虛擬機(jī),則執(zhí)行:
如果要為指定的虛擬機(jī)安裝VMware Tools,則執(zhí)行:
如果要克隆虛擬機(jī),則可以先關(guān)閉虛擬機(jī),為虛擬機(jī)創(chuàng)建快照,之后再克隆虛擬機(jī)。
執(zhí)行上述命令之后,將為C:vmsxpxp.vmx虛擬機(jī)關(guān)機(jī)、創(chuàng)建一個(gè)名為fix1的快照,并從此快照創(chuàng)建出一個(gè)名為XP01、保存在C:vmsxp01下的虛擬機(jī)??寺〉姆绞綖椤版溄涌寺 ?,如果要?jiǎng)?chuàng)建完全克隆的虛擬機(jī),則參數(shù)改為full,命令如下:
如果要?jiǎng)h除快照,例如刪除c:vmsxpxp.vmx中的快照f(shuō)ix1,則執(zhí)行:
下面是一個(gè)編寫好的批處理程序,可以實(shí)現(xiàn)批量創(chuàng)建虛擬機(jī)、批量啟動(dòng)虛擬機(jī),并向虛擬機(jī)中添加配置文件、實(shí)現(xiàn)添加啟用VNC連接并為不同虛擬機(jī)設(shè)置不同VNC連接端口的功能。
在本示例中,源虛擬機(jī)保存配置文件為“F:VMS-2016Windows 7Windows 7.vmx”,該虛擬機(jī)安裝好操作系統(tǒng)、應(yīng)用程序之后關(guān)閉虛擬機(jī)。該腳本實(shí)現(xiàn)的功能主要如下。
1.之后腳本會(huì)創(chuàng)建一個(gè)名為VM11的快照。
2.克隆創(chuàng)建10個(gè)虛擬機(jī)(參數(shù)從1001到1010,如果你要修改虛擬機(jī)的數(shù)量,只需要修改文中的1010即可,例如要?jiǎng)?chuàng)建100個(gè)虛擬機(jī)則改為1100)。新克隆的虛擬機(jī)保存在F:VMS-2017文件夾中。每個(gè)虛擬機(jī)分別保存在1001開始的子文件夾中,虛擬機(jī)名稱以1001開始。
3.向每個(gè)虛擬機(jī)添加啟用VNC命令、添加虛擬機(jī)己復(fù)制命令、并指定VNC連接端口為虛擬機(jī)的順序號(hào),例如1001的虛擬機(jī)的VNC連接端口為1001。
4.創(chuàng)建虛擬機(jī)完成后,可以間隔30秒啟動(dòng)虛擬機(jī)。如果你要修改啟動(dòng)間隔,修改ping -n 30 127.0.0.1中的30即可。
5.之后可以間隔10秒停止虛擬機(jī)。
注意:如果創(chuàng)建“克隆鏈接”的虛擬機(jī),父虛擬機(jī)所在位置最好是在SSD磁盤,這樣可以提高虛擬機(jī)的性能。如果要?jiǎng)?chuàng)建“完全克隆”的虛擬機(jī),則將以下腳本中l(wèi)inked改為full。在實(shí)際的環(huán)境中,需要用你的虛擬機(jī)路徑、克隆目標(biāo)代替腳本中的路徑。
編寫的腳本內(nèi)容如下所示。
REM 本批處理完成為虛擬機(jī)創(chuàng)建快照、從快照創(chuàng)建克隆鏈接的虛擬機(jī)、為虛擬機(jī)配置參數(shù)、啟動(dòng)虛擬機(jī)、停止虛擬機(jī)的功能
REM 王春海,2017年2月20日
PAUSE 關(guān)閉所有正在運(yùn)行的虛擬機(jī)完成,按任意鍵退出。