1. 程式人生 > >在VMware Workstation中批量創建上千臺虛擬機(下)

在VMware Workstation中批量創建上千臺虛擬機(下)

workstation 創建虛擬機 vmrun


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中批量創建上千臺虛擬機(下)