VirtualBox 提供強大的命令列工具 VBoxManage,讓我們能在無圖形介面的情況下於 Windows 後台啟動、管理、關閉虛擬機,極適合伺服器化部署、CI/CD 流程或開機自動啟動服務。本文整理核心指令與實戰批次檔範例。
C:\Program Files\Oracle\VirtualBox\) 已加入系統 PATH 環境變數,或在腳本中使用完整路徑。VBoxManage list vms 查詢。| 功能 | 指令 | 說明 |
|---|---|---|
| 列出所有虛擬機 | VBoxManage list vms | 顯示名稱與 UUID |
| 列出詳細資訊 | VBoxManage list vms --long | 含設定檔路徑、硬體配置等 |
| 列出正在運行的 VM | VBoxManage list runningvms | 僅顯示運行中實例 |
| 後台啟動 (Headless) | VBoxManage startvm "VM名稱" --type headless | 無視窗背景運行,適合服務化 |
| 啟動並啟用 VRDP 遠端桌面 | VBoxManage startvm "VM名稱" --type vrdp | 支援 RDP 客戶端連線 |
| 修改 VRDP 埠號 (多 VM 並行) | VBoxManage controlvm "VM名稱" vrdeport <埠號> | 預設 3389,避免衝突 |
| 優雅關機 (ACPI 關機信號) | VBoxManage controlvm "VM名稱" acpipowerbutton | 相當於按機殼電源鍵,客體 OS 正常關機 |
| 強制關機 (拔電源) | VBoxManage controlvm "VM名稱" poweroff | 立即終止,可能造成資料遺失 |
| 儲存狀態 (暫停) | VBoxManage controlvm "VM名稱" savestate | 將記憶體寫入磁碟,下次可還原繼續 |
| 建立快照 | VBoxManage snapshot "VM名稱" take "快照名" --description "說明" | 熱備份當前狀態 |
| 還原快照 | VBoxManage snapshot "VM名稱" restore "快照名" | 回滾至快照狀態 |
start_vm_headless.bat,內容如下:@echo off
REM === 請修改以下兩行 ===
set VBOX_PATH="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
set VM_NAME=UbuntuServer
REM ======================
%VBOX_PATH% startvm "%VM_NAME%" --type headless
VBoxHeadless.exe 進程)。shell:startup → 將批次檔捷徑放入啟動資料夾。$vm = "UbuntuServer"
$vbox = "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
$state = & $vbox showvminfo $vm --machinereadable | Select-String "VMState="
if ($state -match '"poweroff"') {
& $vbox startvm $vm --type headless
Write-Host "VM 已在後台啟動"
} elseif ($state -match '"running"') {
Write-Host "VM 已在運行中"
} else {
Write-Warning "VM 狀態異常: $state"
}
Program Files (x86),路徑需對應調整。