Oracle VirtualBox สามารถจัดการผ่าน commandline ทั้งหมดดังนั้นจึงเป็นไปได้ที่จะเขียนสคริปต์ที่ทำเช่นนั้น
สร้างแบตช์ไฟล์ตัวอย่างStart VM.cmdและใส่เนื้อหาดังต่อไปนี้:
@echo off
cd /d "C:\Program Files\Oracle\VirtualBox"
start "" VirtualBox.exe --startvm "Virtual Machine 1"
set var=""
echo Waiting for the virtualbox to complete its startup routine.
:loop
for /f "delims=" %%A in ('vboxmanage list runningvms') do set "var=%%A"
set var2=%var:"=%
if "%var2%"=="Virtual Machine 1 {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}" goto next
goto loop
:next
VBoxManage controlvm "Virtual Machine 1" pause
เปลี่ยนบรรทัดที่ 2 เป็นพา ธ ที่คุณติดตั้ง VirtualBox นอกจากนี้ให้เปลี่ยนชื่อและ guid ของเครื่องเสมือนเพื่อให้ตรงกับของคุณในสถานที่ต่างๆในสคริปต์ของคุณ
คุณสามารถทำได้โดยเปิดพร้อมท์คำสั่งและพิมพ์คำสั่งต่อไปนี้:
C:\Program Files\Oracle\VirtualBox\vboxmanage list vms
คัดลอกทั้งแถวนั้นและวางใน batchfile ของคุณจากนั้นลบเครื่องหมายคำพูด (") ออกจากชื่อเครื่องเสมือน
ตัวอย่างเช่น"Virtual Machine 1" {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}กลายเป็นVirtual Machine 1 {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}
เรื่องราวการศึกษาสั้น ๆ
ฉันทำบางสิ่งในสคริปต์นี้และฉันจะอธิบายข้อผิดพลาดและทำไมฉันจึงทำเช่นนั้น
ฉันใช้ start เพื่อเปิดเครื่องเสมือนเพื่อให้แน่ใจว่าสคริปต์จะทำงานต่อไปในขณะที่ VM เริ่มทำงาน หากฉันไม่ทำเช่นนั้นสคริปต์จะรอให้ VM ยกเลิกก่อนที่จะดำเนินการต่อ
ถัดไปฉันset var=""ไม่จำเป็นต้องใช้เทคนิคหากคุณเริ่มต้นสคริปต์โดยดับเบิลคลิกที่ไอคอนจาก explorer แต่หากคุณใช้พรอมต์คำสั่งและคุณเรียกใช้หลายครั้งสคริปต์จะทำงานในครั้งแรกเท่านั้น
ต่อไปฉันสร้างลูป ในลูปฉันสอบถามว่า VM กำลังทำงานอยู่ หาก VM ที่ฉันสนใจกำลังทำงานอยู่เราจะทำลายลูป ตอนนี้ฉันต้องทำอุบายที่นี่เพื่อให้งานนี้ เนื่องจากผลตอบแทน vm มี "มันจะคิดว่า" อยู่ในคำสั่ง if ก่อนหน้านี้และทำให้สคริปต์ไม่ทำงาน ในการจัดการกับสิ่งนี้ฉันจะลบ "ออกจาก% var% และเก็บไว้เป็น var2 นี่เป็นสิ่งจำเป็นเพราะถ้าไม่มี VM กำลังทำงานอยู่% var% จะไม่ได้รับการปรับปรุงฉันจะใช้set var=%var:"=%มันจะทำงานได้หรือไม่ สคริปต์ยุติด้วยข้อผิดพลาด
ในที่สุดหลังจาก VM ทำงานมันจะจับคู่ที่ตรงกันและแบ่งลูป คำสั่งหยุดชั่วคราวจะถูกส่งไปยัง VM และมันจะหยุด VM ทันทีที่สามารถทำได้ มันไม่ได้เกิดขึ้นทันที แต่ความล่าช้านั้นน้อยมากและเนื่องจากรายการ vboxmanage ที่กำลังเรียกใช้ vms ส่งคืนระบบจะรู้ว่าจะยอมรับคำสั่ง