如何使用脚本来控制 VirtualBox 客户机?

如何使用脚本来控制 VirtualBox 客户机?

参考:从 Ubuntu 桌面启动 Windows 中的应用程序

我想知道 Takkat 是否可以详细说明脚本文件中的实际执行方式。

这将非常有帮助。提前致谢

我的脚本文件 InternetExplorerVM.sh 看起来像这样,执行是

/path/to/InternetExplorerVM.sh "C:\Program Files\Internet Explorer\iexplore.exe"

#!/bin/bash

# start Internet Explorer inside of a Windows7 Ultimate VM
echo "Starting 'Internet Explorer' browser inside Windows7 virtual machine"
echo ""
sleep 1
echo "Please be patient"

VBoxManage startvm b307622e-6b5e-4e47-a427-84760cf2312b

sleep 15

echo ""
echo "Now starting 'Internet Explorer'"
##VBoxManage --nologo guestcontrol b307622e-6b5e-4e47-a427-84760cf2312b execute --image "$1" --username RailroadGuest --password bnsf1234

VBoxManage --nologo guestcontrol b307622e-6b5e-4e47-a427-84760cf2312b execute --image "C:\\Program/ Files\\Internet/ Explorer\\iexplore.exe" --username RailroadGuest --password bnsf1234 --wait-exit --wait-stdout

echo ""
echo "Saving the VM's state now"
VBoxManage controlvm b307622e-6b5e-4e47-a427-84760cf2312b savestate

sleep 2

#Check VM state
echo ""
echo "Check the VM state"
VBoxManage showvminfo b307622e-6b5e-4e47-a427-84760cf2312b | grep State

exit

如有错误,我深表歉意,这是我第一次在 askubuntu 上发帖。提前致谢。这非常有帮助。BNSF 客人需要这个,他们的大型机模拟器专门在支持 Java 的 Internet Explorer 上运行。

答案1

他基本上是说你可以这样做:

  1. 创建一个虚拟机,例如 Windows 虚拟机。
  2. 登录虚拟机。
  3. 将虚拟机切换到“无缝”模式
  4. 在 Virtual Box 主窗口中保存虚拟机的状态。
  5. 使用命令创建一个 bash 脚本VBoxManage,以便您可以执行类似以下操作./runinwindows "C:\\some\\path\\executable.exe"

例如:

#!/bin/bash
# Start the VM
VBoxManage startvm "<Name_of_VM>"

# Run the executable
VBoxManage --nologo guestcontrol "<Name_of_VM>" execute --image "$1" --username windowsuser --password password --wait-exit --wait-stdout

# Save the current machine state for the next time you run the script.
VBoxManage controlvm "Name_of_VM" savestate

然后您可以在终端中运行 Windows 可执行文件(在本例中),但它实际上是在虚拟机中运行。

答案2

我写脚本使用 VBoxManage 控制虚拟机。您可以使用如下脚本执行命令:

./vmcontrol.sh -m [VMName] [Your Command]

剧本:

#!/bin/bash
#Creation du script vmcontrol.sh

function execute
{    
    vmname=\$1;
    command=\$2;
    shift 2;
    VBoxManage --nologo guestcontrol \$vmname execute --image \$command --username root --password root --wait-exit --wait-stdout --wait-stderr -- \$@ 2>&1  ;      
}

param=\$1;
#Execution d'une commande
if [ \$param = "-e" ]
then
    command=\$2;
    shift 1;
    execute "Xubuntu" \$@ ;
#Execution d'une commande dans une vm donnée
elif [ \$param = "-m" ]
    then 
        vmname=\$2;
        command=\$3;
        shift 1;
        execute \$@
#Allumer une machine virtuelle donnée
elif [ \$param = "-s" ]
    then
        vmname=\$2;
        VBoxHeadless --startvm \$vmname;
elif [ \$param = "-c" ]
    then
        vmname=\$2;
        VBoxManage clonevm Xubuntu --mode machine --name \$vmname --basefolder /home/VMs --register ;
elif [ \$param = "-r" ]
    then
        vmname=\$2;
        VBoxManage unregistervm \$vmname  --delete ;
elif [ \$param = "-vbox" ]
    then
        startx virtualbox;
elif [ \$param = "-i" ]
     then
    vmname=\$2;
        if [ \$vmname = "vms" ]
            then
            VBoxManage list vms
        elif [ \$vmname = "runningvms" ]
            then
            VBoxManage list runningvms
        else 
            #Erreur 
            echo "error in commmande";
        fi
elif [ \$param = "-sv" ]
    then
        vmname=\$2;
        VBoxManage startvm \$vmname ;
elif [ \$param = "-p" ]
    then
    vmname=\$2;
    VBoxManage controlvm \$vmname  acpipowerbutton;
    else 
        #Erreur 
        echo "error in commmande";
fi

相关内容