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

标签 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
)

启动命令实际上是这样的:

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

当已经存在一个具有我在命令中指定的名称的虚拟机时,就会出现错误,并且我的脚本会捕获该错误(echo 和 exit 都会执行)。

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

这是我尝试启动虚拟机时遇到的错误(引入是为了测试机制)。

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

我如何知道启动是否失败,并以适当的错误代码退出我的批处理文件。我想我可以检查虚拟机状态以查看它是否正在运行(尚未研究这种可能性),但我不想这样做并从 startvm 命令获取实际错误。

编辑:我发现唯一非常相似的是:batch: Exit code for "rd" is 0 on error as well

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

最佳答案

鉴于额外信息,请尝试以下操作:

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

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

关于batch-file - 当出现错误时,VirtualBox startvm 命令始终返回退出代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570661/

相关文章:

windows - =y此时出乎意料

php - 有什么方法可以在 virtualbox vm 中运行 php 来运行 sublime text linter?

php - 如果我通过 vagrant box add 安装 homestead,homestead.yaml 在哪里?

bash - 在 bash 中添加(收集)退出代码

visual-studio - Visual Studio 预构建事件;检查每个事件的退出代码

batch-file - 从批处理脚本返回值

batch-file - 在命令提示符中显示 VBS 变量

windows - 如何在包含引号 ( "") 的批处理文件中运行命令?

Vagrant 错误 : Failed to mount folders in Linux guest

bash - Vi 是 vim 的别名,但退出时代码为 1