VMware Workstation提供的可编程接口
何谓Vmrun命令?其实这并不是什么神秘的东西,相信部分朋友使用过Vmware workstation来安装过一些虚拟机吧。如果你足够细心的话,你会发现在这个软件的安装目录下能找到一个Vmrun.exe可执行文件。如果你从命令行敲入vmrun.exe(当然你得切换到workstation的根目录下),你会惊奇的发现很多该命令提供了很多的参数,这些参数的功能成为了Host机器与Guest机器之间的功能强大的连接桥梁。那么,先一睹下到底有哪些命令可供我们玩转。
1、POWER COMMANDS
如下图:
从上可以看出,这些命令参数可以完成开启或者关闭虚拟机等操作~
比如关机命令可以使用:vmrun start "D:\\Windows7\\Win7.vmx"来启动虚拟机,其中start后面的是要启动的虚拟机系统的配置文件的位置
其他的几个类似,故不再赘述
2、SNAPSHOT COMMANDS
如下图:
顾名思义,这组命令参数主要是用于操作虚拟机系统的快照的。何谓快照,简单的说就是当前系统整个的状态信息。而创建快照(snapshot)的目的,则是在于保存当前系统的状态, 而还原快照(revertToSnapshot)则可以从当前的系统状态还原到指定快照时候的系统状态。这样做对于测试人员来说不难理解,因为测试必须保证处于干净的系统环境,所谓干净的测试环境则是指一个操作系统从被创建开始,只在上面安装过与测试相关的软件与配置,且只能做一次性的测试。而想要达到多次测试的目的,只能通过不断的revert到干净的测试环境那个快照点。
从上图中可以看出,我们可以通过命令来查看系统所有的快照(listSnapshots)、为系统创建快照(snapshot)、删除系统中指定快照(deleteSnapshot)、恢复到某个快照(revertToSnapshot)这几个命令,如下所示:
创建快照:
vmrun snapshot "D:\\Windows7\\Win7.vmx" "snapshot1"
但是,一般情况下光是上面还是不行的,尤其是当你想从代码级调用该命令创建虚拟机快照的时候,往往需要用户名与密码来验证。那么该怎么写呢?正确的命令如下:
vmrun -gu 你虚拟机系统的用户名 -gp 你虚拟机系统的密码 snapshot "D:\\Windows7\\Win7.vmx" "snapshot1" (<=快照名称)
上面的这个命令是不是一定会成功?也不一定,如果还是失败的话,那么请尝试下面三个操作,如果还是解决不了你的问题的话,那么笔者保持沉默~
1)先检测是否支持虚拟机快照的创建
检测方法很简单, 查看工作站的菜单项的Vm选项下的Snapshot子选项,如下图:
如果Snapshot右弹出菜单所有选项都灰掉的话,那么你得考虑先解决掉这个问题了
2)检测是不是Vmtools在捣鬼
确定你的虚拟机系统中有没安装Vmtools或者是不是可以进行更新,如果没装请装之,装了的话最好update下,关于怎么安装或更新另请查询。
3)加上本地系统用户名与密码验证
vmrun -u Host机器的用户名 -p Host机器的密码 -gu 虚拟机系统的用户名 -gp 虚拟机系统的密码 snapshot "vmx path" "snapshot1"
3、GUEST OS COMMAND
如下图:
这组命令很有实用性,主要是可以在Host机器的下,对Guest机器(也就是虚拟机系统)进行一列的操作,如文件操作、进程操作、运行指定程序和运行脚本等,这些命令都是需要用户名与密码的验证,也就是在命令行中加上-gu与-gp参数,参见上面。
这组命令中可能需要注意的是,runProgramInGuest命令可以执行虚拟机系统中的一些命令,如打开一个notepad,直接敲入如下命令:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" notepad
如果想要打开虚拟机C盘根目录下的1.txt文件,可以在运行的程序后面加上参数,如下:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" notepad C:\\1.txt
如果你在代码级别调用这个命令,希望你能够始终意识到一个事实,那就是上述命令默认是等到在Guest机器运行的程序结束后才返回。如果,亲爱的你,串行的执行一系列的命令,而前一个命令恰恰是个Long wait的程序,那么这之后的程序往往会挂住,无法执行。如你使用上述命令打开一个文本后,那么主程序就会等到你将Guest系统中的notepad关闭才会返回。
那么,这个时候,你可以选择-nowait开关命令来选择无等待的执行,即每个命令一执行后就返回,不会产生阻塞,命令如下:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" -nowait notepad C:\\1.txt
其他的命令,大家可以自己尝试下,在此不再赘述。