我有一个简单的批处理文件来部署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
我尝试了建议的解决方案,但它对我不起作用。
答案 0 :(得分:2)
鉴于额外信息,请尝试以下方法:
call "%vboxmanage_exe%" startvm "%vm_name%" --type headless 2>&1 |find "error:" >nul && exit /b 1
它假定您提供的错误消息位于控制台上而不是日志文件中,这需要采用不同的方法。