ComputerScience

Matthieu TUDURY… Just another WordPress site…

VirtualBox Headless et ajouter des périphériques USB sous Windows

Un petit script pour répondre a une problématique, comment ajouter en script un périphérique USB à une machine Virtuelle à l'aide de VirtualBox ?

Si vous exploitez une machine déportée pour héberger vos machines virtuelles, vous utilisez sans doute VBoxHeadless et un accès TSE pour accéder à ces dernières.

Mais comment connecter vos périphériques USB lorsque vous n'avez plus d'interface graphique ? Dans VirtualBox une série d’exécutables en ligne de commande est prévu pour effectuer des actions sur ces machines.

Dans ce cas précis, VBoxManage va nous servir.

Voici les commandes que vous utiliserez :

C:\VBox>VBoxManage list usbhost

Host USB Devices:


UUID:               00f631b2-118c-40f3-a5b6-9c5cc654c743
VendorId:           0x041e (041E)
ProductId:          0x401d (401D)
Revision:           0.1 (0001)
Manufacturer:       Creative
Product:            Creative WebCam NX Ultra
Current State:      Available

l'utilisation de la commande :

VBoxManage controlvm "nom de ma vm" usbattach 00f631b2-118c-40f3-a5b6-9c5cc654c743

permet d'attacher la webcam à la machine virtuelle. Mais cet UUID change régulièrement donc difficile de créer un script simple.

J'ai donc créé un javascript vous permettant à partir du nom du produit d'ajouter le périphérique usb à la machine virtuelle.

cscript InstallByUUID.wsf "Creative WebCam NX Ultra" "nom de ma vm"

Contenu du script ( InstallByUUID.wsf ) :

<job>
<script language="JScript">

        var tmppath = "c:\\temp";
        var wtattach = "";

        var lastUUID = "";
        var producttofind = "";
        var found = false;

        function FindUUID(lineinfo)
        {
                if (lineinfo.indexOf('UUID:')==0)
                {
                        lastUUID = lineinfo.substring(20,56);
                }
                if (lineinfo.indexOf('Product:')==0)
                {
                        var product = lineinfo.substring(20);
                        if (product == producttofind)
                                found = true;
                }
        }

        if (WScript.Arguments.length<2) {
                WScript.echo("InstallByUUID.wsf [ProductNameofUSBItem] [NameOfVmToAttach]");
                exit(0);
        }
        producttofind = WScript.Arguments(0);                          var objShell = WScript.CreateObject("WScript.Shell");         objShell.Run('cmd /C ""c:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe" list usbhost > '+tmppath+'\\usbatach.txt"', 0, 1);

        var objFileSystem = WScript.CreateObject("Scripting.FileSystemObject");
        var objFile = objFileSystem.OpenTextFile(tmppath+'\\usbatach.txt');
        while ((!objFile.AtEndOfStream)&&(!found))
        {
                FindUUID( objFile.ReadLine( ));
        }
        objFile.Close();

        objFileSystem.DeleteFile(tmppath+'\\usbatach.txt');

        if (!found)
        {
                WScript.echo(producttofind +' n\'a pas été trouvé');
        }

        var runcmd = 'cmd /C ""c:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe" controlvm "'+WScript.Arguments(1)+'" usbattach '+lastUUID+'"';
        objShell.Run(runcmd, 0, 1);
        //WScript.echo(runcmd);
</script>
</job>