![](/img/trans.png)
[英]How to check if string is available on https page via command line on windows?
[英]How to check via command line if a VirtualBox VM is not running on Windows
我正在一個Jenkins項目中,以使用用戶提供的參數遠程啟動和關閉特定的VM。
我設法找到一種方法來確定指定的VM已啟動並正在運行,並准備好進行進一步的說明,但是我還沒有找到一種方法來確定指定的VM已關閉電源。
在構建步驟中使用的當前代碼是這樣的:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
ECHO Shutting down VM %VM% on Host %computername%...
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm %VM% acpipowerbutton
ECHO %ERRORLEVEL%
IF ERRORLEVEL 1 EXIT /B 1
:LOOP
WAITFOR /T 10 VMtoShutDown 2>NUL
FOR /f %%a IN ('VBoxManage list runningvms ^| FINDSTR %VM%') DO SET VM_State=%%a
IF [!VM_State!] EQU [] (
ECHO %VM% is not running.
EXIT /b 0
)
GOTO LOOP
邏輯是這樣的:
controlvm
命令以執行目標VM的ACPI關閉。 FOR
遍歷正在運行的VM列表,以查看目標VM是否仍在運行。 主要問題是:LOOP
子句中的FOR
語句。 在構建步驟的“啟動”部分中,我可以使用VboxManage list runningvms
來確定是否列出了指定的VM,並以此方式對其進行處理,並表明可以成功啟動用於啟動指定VM的Jenkins構建。
但是,我注意到,一旦通過較早的controlvm
命令將目標虛擬機從正在運行的虛擬機列表中刪除, FOR
語句的整個DO
部分就什么都不做。 它不會將VM_State=%%a
設置為一個,也不會做我在FOR
語句中拋出的其他任何事情。 這導致:LOOP
無限循環,因為唯一的條件檢查器不會觸發。
問題:是否可以確定特定名稱的VM是否已關閉電源?
筆記:
這在Windows 10上對我有效,希望對您有所幫助!
@ECHO OFF
SETLOCAL EnableDelayedExpansion
ECHO Shutting down VM %VM% on Host %computername%...
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm %VM% acpipowerbutton
ECHO VirtualBox command return code: %ERRORLEVEL%
IF ERRORLEVEL 1 EXIT /B 1
:LOOP
REM Sleep for 1 second by using a ping hack :)
ping -n 2 127.0.0.1 > nul
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showvminfo %VM% | findstr /c:"powered off" >NUL
IF %ERRORLEVEL% EQU 0 GOTO END
echo VM %VM% not powered off yet...
GOTO LOOP
:END
echo VM %VM% powered off.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.