在VMware Workstation中批量創建上千臺虛擬機(下)
2 快速克隆100臺Workstation虛擬機方法
在上一節的內容中,無論是創建"完全克隆"的虛擬機還是"克隆鏈接"的虛擬機,都是在VMware Workstation的圖形界面中以向導的方式創建的,每次創建一個虛擬機都需要多個步驟才能完成。在創建的虛擬機數量有限的情況下,使用圖形界面創建虛擬機還可以接受,如果需要批量創建多臺虛擬機,例如創建幾十臺、上百臺甚至上千臺虛擬機時,反復的操作會讓人"崩潰"。本文介紹采用VMware 提供的命令行工具vmrun.exe並通過編寫批處理腳本的方式,實現虛擬機的批量創建、批量啟動與批量關機。
2.1 vmrun命令簡介
vmrun.exe是VMware Workstation中提供的一個命令行接口程序,可以實現對VMware Workstation虛擬機或遠程VMware ESXi虛擬機的大多數管理功能,例如虛擬機的電源管理(開機、關機、休眠、重啟、暫停、恢復)、快照管理(創建快照、列出快照、刪除快照、恢復到指定快照點)、客戶機命令管理(執行客戶機中程序、添加管理共享文件夾、列表客戶機進程、清除客戶機進程)、註冊虛擬機、刪除虛擬機、克隆虛擬機等功能。
vmrun.exe保存在"C:\Program Files (x86)\VMware\VMware Workstation"文件夾中,可以在命令行中執行該程序。在命令窗口中進入C:\Program Files (x86)\VMware\VMware Workstation文件夾,執行vmrun /?可以查看幫助參數。vmrun的命令格式如下:
vmrun 認證標誌 命令 參數
vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS]
其中"認證標誌(AUTHENTICATION-FLAGS)"包括以下選項。
--------------------
-h <hostName> (用於VMware Server、VMware ESXi、ESX Server,不適用於Workstation)
-P <hostPort> (用於VMware Server、VMware ESXi、ESX Server,不適用於Workstation)
-T <hostType> (ws|server|server1|fusion|esx|vc|player)
其中:
-T serve 用於 Server 2.0
-T server1 用於 Server 1.0
-T ws 用於 VMware Workstation
-T ws-shared 用於 VMware Workstation (shared mode)
-T esx 用於 VMware ESX
-T vc 用於 VMware vCenter Server
-u <主機系統用戶名> (不適用於Workstation)
-p <主機系統用戶密碼> (不適用於Workstation)
-vp <加密虛擬機的密碼>
-gu <客戶機系統用戶,客戶機,指Workstation或ESXi的虛擬機>
-gp <客戶機系統用戶密碼>
vmrun的命令包括POWER(電源)、SNAPSHOT(快照)、GUEST OS(客戶機操作系統)、GENERAL(常規)等幾項命令,每個命令又有參數及可選參數。下面介紹主要的vmrun命令。
為了在命令提示窗口中的任何位置執行vmrun.exe命令,你可以將vmrun.exe程序所在的路徑添加到系統的PATH路徑中。
(1)進入"系統屬性",在"高級"選項卡中單擊"環境變量"按鈕,如圖5-3-1所示。
圖5-3-1 環境變量
(2)在"環境變量"中的"系統變量"中找到Path,單擊"編輯"按鈕,在"變量值"後面先輸入一個英文的分號(:),然後將vmrun.exe程序的路徑(C:\Program Files (x86)\VMware\VMware Workstation )"粘貼"到此,如圖5-3-2所示。然後單擊"確定"按鈕完成設置。
圖5-3-2 添加Path路徑
【說明】當前示例計算機添加後的環境變量如下:
C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\VMware\VMware Workstation
你可以進入命令提示窗口之後通過執行path命令查看這一參數,如圖5-3-3所示。
1 POWER COMMANDS(電源命令)。
POWER COMMANDS包括start(啟動虛擬機或Team)、stop(關閉虛擬機或Team)、reset(虛擬機復位命令,可選參數為hard或soft)、suspend(休眠)、pause(暫停,暫停虛擬機的運行)、unpause(從暫停恢復)。這些命令的參數為"Path to vmx file",即包括詳細路徑的虛擬機配置文件。
例如,在一臺Windows主機中(當前安裝了VMware Workstation),啟動一個虛擬機的命令如下。
vmrun -T ws start "c:\my VMs\myVM.vmx"
在安裝了VMware Workstation的Windows主機中,啟動遠程ESXi主機中一個虛擬機的命令如下。
vmrun -T esx -h https://esxi主機的IP地址或域名/sdk -u hostUser -p hostPassword stop "[storage1] vm/myVM.vmx"
如果要停止、重啟、休眠虛擬機,只要將這start換成stop、reset、suspend即可。
如果要在Mac計算機上安裝了VMware Fusion,想啟動其中的虛擬機,則需要如下的命令。
vmrun -T fusion start "~/Documents/Virtual Machines.localized/XP/XP.vmx"
2 SNAPSHOT COMMANDS(快照命令)
使用snapshot命令,可以管理指定虛擬機的快照,包括listSnapshots(列出指定虛擬機的快照,可選參數showTree,以樹型方式顯示)、snapshot(為指定虛擬機創建快照)、deleteSnapshot(刪除快照)、revertToSnapshot(恢復到指定快照)。
例如在一臺安裝了VMware Workstation的Windows主機中,有一臺Windows Server 2008 R2的虛擬機,這個虛擬機有多個快照,如圖5-3-4所示。圖
圖5-3-4 查看當前虛擬機的快照
如果要顯示該虛擬機的所有快照,可以執行如下命令:
vmrun -t ws listsnapshots "F:\VM_Temp\WS08R2-SP1數據中心版\WS08R2-SP1.vmx"
如果要以樹型方式顯示快照,則在vmx文件後面添加showtree參數。
vmrun -t ws listsnapshots "F:\VM_Temp\WS08R2-SP1數據中心版\WS08R2-SP1.vmx" showtree
該命令執行的結果如圖5-3-5所示。圖5-3-5 命令執行結果
3 GUEST OS COMMANDS(客戶機系統命令)
使用GUEST OS COMMANDS命令參數,可以檢查指定虛擬機中文件(fileExistsInGuest)或目錄(directoryExistsInGuest)是否存在、設置共享文件夾(setSharedFolderState)、刪除共享文件夾(removeSharedFolder)、啟動虛擬機中指定的程序(runProgramInGuest)、列出虛擬機中執行程序進程、在虛擬機與主機之間拷貝文件等。
(1)runProgramInGuest ,在客戶機中執行程序,必須參數為包括詳細路徑的vmx文件,可選參數為 -noWait、-activeWindow、-interactive。
例如,當前有一臺Windows XP的虛擬機正在運行(這個虛擬機的配置文件為c:\VMS\XP\XP.vmx,如
圖5-3-6所示。圖5-3-6
一臺正在運行的XP虛擬機
(2)當前虛擬機的登錄帳戶為Linna,密碼為1234,如圖5-3-7所示。圖
(3)如果要在主機,啟動這個虛擬機中的"計算器"程序,則可以執行如下命令
vmrun -T ws -gu linna -gp 1234 runProgramInGuest "C:\VMS\Xp\XP.vmx" "C:\windows\system32\calc.exe"
如圖5-3-8所示。
圖5-3-8 讓虛擬機啟動指定程序
在圖3-3-8中,當虛擬機中的"計算器"程序退出時,命令提示符中命令行才會返回到C:提示符。如果不想讓執行的程序"退出"後才返回到命令行,則可以添加-noWait。
vmrun -T ws -gu linna -gp 1234 runProgramInGuest "C:\VMS\Xp\XP.vmx"-nowait "C:\windows\system32\calc.exe"
(4)如果要檢查虛擬機C:\temp中是否存在test.txt文件,則執行
vmrun -T ws -gu linna -gp 1234 fileExistsInGuest "C:\VMS\Xp\XP.vmx" "C:\\TEMP\\test.txt"
如果要想檢查c:\temp文件夾是否存在,則執行
vmrun -T ws -gu linna -gp 1234 directoryExistsInGuest "C:\VMS\Xp\XP.vmx" "C:\\TEMP\\"
如果要執行腳本(腳本程序為c:\perl\perl.exe,腳本文件在根目錄script.pl),格式如下。
vmrun -T ws -gu linna -gp 1234 runScriptInGuest C:\VMS\Xp\XP.vmx C:\perl\perl.exe C:\script.pl
(5)如果要禁用共享文件夾(以C:\VMS\Xp\XP.vmx為例,下同),則執行
vmrun-T ws -gu linna -gp 1234 disableSharedFolders "C:\VMS\Xp\XP.vmx"
如果要為指定虛擬機啟用共享文件夾,則執行
vmrun-T ws -gu linna -gp 1234 enableSharedFolders "C:\VMS\Xp\XP.vmx"
將主機D盤根目錄為指定虛擬機設置為共享文件夾,設置共享名為DDDD,命令如下
vmrun-T ws -gu linna -gp 1234 addSharedFolder "C:\VMS\Xp\XP.vmx" DDDD D:\
(6)如果要列出虛擬機中所有進程,則執行如下命令。
vmrun-T ws -gu linna -gp 1234 listProcessesInGuest"C:\VMS\Xp\XP.vmx"
如圖5-3-9所示。
如果要殺除某個進程(如圖圖5-3-9中的“記事本”進程,該進程ID為636),則執行
vmrun-T ws -gu linna -gp 1234 killProcessInGuest "C:\VMS\Xp\XP.vmx" 636
(7)可以在主機與虛擬機之間拷貝文件,從主機到虛擬機拷貝文件命令為CopyFileFromHostToGuest,從虛擬機到主機拷貝文件命令為CopyFileFromGuestToHost。例如,如果要將主機g:\temp中的vncviewer-6.0.2.exe文件復制到虛擬機的C盤temp文件夾,命名為vnc2.exe,命令如下。
vmrun-T ws -gu linna -gp 1234 CopyFileFromHostToGuest "C:\VMS\Xp\XP.vmx" g:\temp\vncviewer-6.0.2.exe c:\temp\vnc2.exe
如果要復制的程序是帶中文或空格,則需要用英文雙引號包括,例如
vmrun-T ws -gu linna -gp 1234 CopyFileFromHostToGuest "C:\VMS\Xp\XP.vmx" "g:\temp\RAR3.51官方版.exe" "c:\temp\RAR3.51官方版.exe"
如果要從虛擬機復制到主機,則命令如下(從虛擬機C盤temp復制RAR3.51官方版.exe到G盤temp中命名為rar.exe。
vmrun-T ws -gu linna -gp 1234 CopyFileFromGuestToHost "C:\VMS\Xp\XP.vmx" "c:\temp\RAR3.51官方版.exe""g:\temp\rar.exe"
(7)如果要列出所有正在運行的虛擬機,則執行
vmrun–t ws list
(8)如果要為指定的虛擬機安裝VMware Tools,則執行
vmrun-T ws installTools "C:\VMS\Xp\XP.vmx"
(9)如果要克隆虛擬機,則可以先關閉虛擬機,為虛擬機創建快照,之後再克隆虛擬機。
vmrun-T ws stop "C:\VMS\Xp\XP.vmx"
vmrun-T ws snapshot "C:\VMS\Xp\XP.vmx" fix1
vmrun-T ws clone "C:\VMS\Xp\XP.vmx" C:\VMS\XP01\XP01.VMX linked -snapshot=fix1 -cloneName=XP01
執行上述命令之後將為c:\vms\xp\xp.vmx虛擬機關機、創建一個名為fix1的快照,並從此快照創建出一個名為XP01、保存在c:\vms\xp01下的虛擬機。克隆的方式為“鏈接克隆”,如果要創建完全克隆的虛擬機,則參數改為full,命令如下。
vmrun-T ws clone "C:\VMS\Xp\XP.vmx" C:\VMS\XP02\XP02.VMX full -snapshot=fix1 -cloneName=XP02
(9)如果要刪除快照,例如刪除c:\vms\xp\xp.vmx中的快照fix1,則執行:
vmrun -T ws deleteSnapshot "C:\VMS\Xp\XP.vmx" fix1
2.2 編寫腳本批量創建虛擬機
下面是一個編寫好的批處理程序,可以實現批量創建虛擬機、批量啟動虛擬機,並向虛擬機中添加配置文件、實現添加啟用VNC連接並為不同虛擬機設置不同VNC連接端口的功能。
在本示例中,源虛擬機保存配置文件為“F:\VMS-2016\Windows 7\Windows 7.vmx”,該虛擬機安裝好操作系統、應用程序之後關閉虛擬機。該腳本實現的功能主要如下。
(1)之後腳本會創建一個名為VM11的快照。
(2)克隆創建10個虛擬機(參數從1001到1010,如果你要修改虛擬機的數量,只需要修改文中的1010即可,例如要創建100個虛擬機則改為1100)。新克隆的虛擬機保存在F:\VMS-2017文件夾中。每個虛擬機分別保存在1001開始的子文件夾中,虛擬機名稱以1001開始。
(3)向每個虛擬機添加啟用VNC命令、添加虛擬機己復制命令、並指定VNC連接端口為虛擬機的順序號,例如1001的虛擬機的VNC連接端口為1001。
(4)創建虛擬機完成後,可以間隔30秒啟動虛擬機。如果你要修改啟動間隔,修改ping -n 30 127.0.0.1中的30即可。
(5)之後可以間隔10秒停止虛擬機。
【註意】如果創建“克隆鏈接”的虛擬機,父虛擬機所在位置最好是在SSD磁盤,這樣可以提高虛擬機的性能。如果要創建“完全克隆”的虛擬機,則將以下腳本中linked改為full。在實際的環境中,需要用你的虛擬機路徑、克隆目標代替腳本中的路徑。
編寫的腳本內容如下。
REM 本批處理完成為虛擬機創建快照、從快照創建克隆鏈接的虛擬機、為虛擬機配置參數、啟動虛擬機、停止虛擬機的功能
REM 王春海,2017年2月20日
C:
CD"C:\Program Files (x86)\VMware\VMware Workstation\"
REM 為指定的虛擬機,創建快照名稱為VM11
vmrun-T ws snapshot "F:\VMS-2016\Windows 7\Windows 7.vmx" VM11
PAUSE 創建快照完成,按任意鍵繼續
REM 創建克隆鏈接的虛擬機,克隆10個
for /l%%a in (1001,1,1010) do (
vmrun.exe-T ws clone "F:\VMS-2016\Windows 7\Windows 7.vmx" F:\VMS-2017\%%a\%%a.vmx linked -snapshot=VM11 -cloneName=%%a
)
PAUSE 克隆虛擬機完成,按任意鍵繼續
REM 啟用VNC,端口%%b,密碼為空
@echoon
for /l %%bin (1001,1,1010) do (
echoanswer.msg.uuid.altered = "I Copied It">>F:\VMS-2017\%%b\%%b.vmx
echoRemoteDisplay.vnc.enabled = "TRUE" >>F:\VMS-2017\%%b\%%b.vmx
echoRemoteDisplay.vnc.port = "%%b" >>F:\VMS-2017\%%b\%%b.vmx
remecho RemoteDisplay.vnc.key = "" >>F:\VMS-2017\%%b\%%b.vmx
)
pause 配置端口完成,按任意鍵繼續
REM 克隆完成,間隔30秒啟動虛擬機
for /l%%c in (1001,1,1010) do (
vmrun.exe-T ws start F:\VMS-2017\%%c\%%c.vmx
ping-n 30 127.0.0.1 >nul
)
pause 啟動虛擬機完成,按任意鍵繼續
REM 下課,間隔30秒停止虛擬機
for /l%%d in (1001,1,1010) do (
vmrun.exe-T ws stop F:\VMS-2017\%%d\%%d.vmx
ping-n 30 127.0.0.1 >nul
)
PAUSE 關閉所有正在運行的虛擬機完成,按任意鍵退出
我在參加51CTO學院4周年最受歡迎講師的活動,看完文章請順手投我(王春海)一票,謝謝!投票鏈接:
http://edu.51cto.com/activityvote/voteLec
下面是學院移動版最新測試功能:文章打賞。如果你感覺作者的文章寫的不錯,可以通過“支付寶”或“微信”獎勵作者一些銀子,不需要太多,一點心意就可,不獎勵就請投票吧,謝謝!
本文出自 “王春海的博客” 博客,謝絕轉載!
在VMware Workstation中批量創建上千臺虛擬機(下)