จะเริ่ม / เรียกคืน Oracle VirtualBox ได้อย่างไรและทันทีหลังจากหยุดชั่วคราว


0

ฉันต้องการเริ่มต้นหรือเริ่มใช้งานเครื่องเสมือนอีกครั้งและทันทีที่ฉันสามารถควบคุมเมาส์วางไว้ในโหมดหยุดชั่วคราว (โฮสต์ + p)

ด้วยวิธีนี้ฉันสามารถเริ่มต้น vm และงานอื่น ๆ แต่ไม่มีทรัพยากรระบบ vm drain แต่ฉันสามารถใช้ VM ที่จะโดยยกเลิกการหยุดชั่วคราว เช่นเดียวกับ Firefox เริ่มต้นในหน่วยความจำดังนั้นจึงสามารถใช้ได้เมื่อคุณต้องการ

ฉันใช้ Windows

คำตอบ:


0

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 ส่งคืนระบบจะรู้ว่าจะยอมรับคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.