搜索
查看: 310|回复: 0

[其他] 调用VirtualBox接口示例

  [复制链接]

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14010
发表于 2019-7-7 16:09:02 | 显示全部楼层 |阅读模式
1、列出所有虚拟机
import console;
import com;

//接口文档:https://www.virtualbox.org/sdkref/interface_i_virtual_box.html
var vbox  = com.CreateObject("VirtualBox.VirtualBox")
var vSession  = com.CreateObject("VirtualBox.Session")

for i,machines in table.eachIndex( vbox.Machines ){
    console.log( machines.name, machines.state == vbox.MachineState_Running ?
"运行中" : "已关闭")
}

console.pause()

2、启动、关闭虚拟机:
import console;
import com;

//接口文档:https://www.virtualbox.org/sdkref/interface_i_virtual_box.html
var vbox  = com.CreateObject("VirtualBox.VirtualBox")
var vSession  = com.CreateObject("VirtualBox.Session")

//获取虚拟机,参数填VirtualBox里显示的虚拟机名称
var vm = vbox.findMachine ("xp-big5")

//GUI模式下启动虚拟机
var vProcess = vm.launchVMProcess(vSession,"gui")

//等待操作完成
vProcess.waitForCompletion(-1)
//检测操作是否成功
if (vProcess.getResultCode() != 0) {
   console.log(
"启动虚拟机失败")
   
return console.pause()
}

//关机
vProcess = vSession.getConsole().powerDown();

//等待操作完成
vProcess.waitForCompletion(-1);
//检测操作是否成功
if (vProcess.getResultCode() != 0) { // we failed to stop the VM
   console.log("关闭虚拟机失败")
   
return console.pause()
}

console.log(
"所有操作已完成,虚拟机:",vm.name)
console.pause()

3、恢复虚拟机到指定快照:
import console;
import com;

var vbox  = com.CreateObject("VirtualBox.VirtualBox")
var vSession  = com.CreateObject("VirtualBox.Session")
var vm = vbox.findMachine ("xp-big5")

//锁定虚拟机会话
vm.LockMachine (vSession, vm.LockType_Shared);

//如果虚拟机已经在运行
if(vSession.console){
   
   
//先关机
    vProcess = vSession.getConsole().powerDown();
   
   
//等待操作完成
    vProcess.waitForCompletion(-1);
   
   
//检测操作是否成功
    if (vProcess.getResultCode() != 0) { // we failed to stop the VM
        console.log("关闭虚拟机失败")
        
return console.pause()
    }
}

//如果参数为null,则获取根快照
var snapShot = vm.FindSnapshot("快照1");

//这里只能用vSession.machine,不能直接用vm.RestoreSnapshot
var snapShotProgress = vSession.machine.RestoreSnapshot(snapShot);

//等待操作完成
snapShotProgress.waitForCompletion(-1);
//检测操作是否成功
if (snapShotProgress.getResultCode() != 0) { // we failed to stop the VM
    console.log("恢复快照失败")
   
return console.pause()
}

//释放会话
vSession.UnLockMachine()

console.log(
"所有操作已完成,虚拟机:",vm.name)
console.pause(
true);
  


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-7-22 09:15 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表