当出现错误时,VirtualBox startvm命令始终返回退出代码0

时间:2014-03-21 22:31:20

标签: batch-file virtualbox exit-code

我有一个简单的批处理文件来部署VM映像(.ova文件),然后将其导入VirtualBox并启动它。

以下是该脚本的最后一行:

call "%vboxmanage_exe%"  import "%dest_path%\%latest_vm_filename%" --vsys 0 --vmname %vm_name%
IF %ERRORLEVEL% neq 0 (
  ECHO VM import failed!
  EXIT /b 1
)

call "%vboxmanage_exe%" startvm "%vm_name%" --type headless
IF %ERRORLEVEL% neq 0 (
  ECHO VM start failed!
  EXIT /b 1
)

start命令实际上如下所示:

VBoxManage.exe startvm "D:\Vms\Latest.ova" --type headless

如果已经有一个名为我在命令中指定的名称的VM,则会出现错误并且我的脚本会捕获它(回显并退出并执行)。

但是,如果导入成功并尝试启动它并失败,则不会捕获错误并继续... startvm命令始终返回退出代码等于0?

这是我尝试启动VM时出现的错误(介绍测试机制)。

VBoxManage.exe: error: Nonexistent host networking interface, name 'Broadcom NetXtreme 57xx Gigabit Controller' (VERR_INTERNAL_ERROR)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Console, interface IConsole

如何通过适当的错误代码退出批处理文件,如何知道启动失败。我想我可以检查VM状态以查看它是否正在运行(还没有考虑到这种可能性),但我宁愿不这样做并从startvm命令中获得实际错误。

编辑:我发现的唯一与此类似的是:batch: Exit code for "rd" is 0 on error as well

我尝试了建议的解决方案,但它对我不起作用。

1 个答案:

答案 0 :(得分:2)

鉴于额外信息,请尝试以下方法:

call "%vboxmanage_exe%" startvm "%vm_name%" --type headless 2>&1 |find "error:" >nul && exit /b 1

它假定您提供的错误消息位于控制台上而不是日志文件中,这需要采用不同的方法。