Exécuter une commande au démarrage

Windows Sandbox permet d’automatiser certaines actions dès l’ouverture de l’environnement isolé grâce à la balise <LogonCommand> dans le fichier .wsb. Cette fonctionnalité est très pratique pour préparer un environnement de test, lancer des scripts, installer des outils ou afficher automatiquement une interface lorsque la sandbox démarre.

    5tq 6tq

Principe général

Quand la sandbox s’ouvre, elle exécute automatiquement la commande définie dans :

<LogonCommand>
  <Command>...</Command>
</LogonCommand>

La commande est exécutée dans le contexte de l’utilisateur de la sandbox (WDAGUtilityAccount), exactement comme si tu l’avais tapée dans la fenêtre exécuter ou dans un terminal.


Exemple minimal

<LogonCommand>
  <Command>explorer.exe</Command>
</LogonCommand>

→ La sandbox démarre et ouvre automatiquement l'explorateur de fichiers.


Exemples concrets utiles

Lancer PowerShell dès l’ouverture

<LogonCommand>
  <Command>powershell.exe -NoExit</Command>
</LogonCommand>

→ PowerShell s’ouvre automatiquement et reste ouvert.


Exécuter un script PowerShell stocké dans un dossier partagé

<LogonCommand>
  <Command>powershell.exe -ExecutionPolicy Bypass -File "C:\Data\setup.ps1"</Command>
</LogonCommand>

⚠️ Le dossier C:\Data doit exister dans la sandbox, souvent grâce à un dossier mappé :

<MappedFolders>
  <MappedFolder>
    <HostFolder>C:\Sandbox\Data</HostFolder>
    <SandboxFolder>C:\Data</SandboxFolder>
  </MappedFolder>
</MappedFolders>

Lancer un programme automatiquement (ex. installer un logiciel)

<LogonCommand>
  <Command>"C:\Install\setup.exe" /silent</Command>
</LogonCommand>

→ L’installation se lance dès l’ouverture.


Lancer un script Batch

<LogonCommand>
  <Command>C:\Scripts\start.bat</Command>
</LogonCommand>

Pourquoi utiliser <LogonCommand> ?

✔️ Avantages

  • Automatisation du travail en sandbox
  • Gain de temps pour les tâches répétitives (installation, préconfiguration, tests)
  • Reproductibilité : toujours le même démarrage, idéal pour un TP ou un test
  • Peut fonctionner avec des dossiers partagés pour récupérer scripts ou outils
  • Compatible avec des scripts PowerShell ou Batch

⚠️ Limites et précautions

  • Si la commande pointe vers un fichier dans un dossier mappé, ce dossier doit :

    • exister sur l’hôte,
    • être correctement défini,
    • être accessible au moment du lancement.
  • <ProtectedClient>Enable</ProtectedClient> (mode sécurisé) coupe tous les dossiers mappés → dans ce cas, seules les commandes internes sont possibles.

  • Si la commande échoue silencieusement, la sandbox démarre quand même (aucun message d’erreur visible par défaut).

  • Les chemins doivent être absolus, comme dans tout fichier .wsb.


Bonnes pratiques

  • Utilise un dossier mappé en lecture seule pour stocker tes scripts (ReadOnly=true).
  • Dans PowerShell, ajoute -ExecutionPolicy Bypass pour éviter les blocages.
  • Garde toujours les chemins courts et simples (ex. C:\Data, C:\Scripts).
  • Teste ton .wsb avec une commande simple avant d’ajouter un script complexe.
  • Pour les élèves : commence par une sandbox “Hello World” qui ouvre Notepad → très bon exercice d’introduction.

Exemple complet et réaliste

Voici un fichier .wsb complet qui :

  • active le GPU,
  • partage un dossier Scripts,
  • lance automatiquement un script PowerShell.
<Configuration>

  <VGpu>Enable</VGpu>
  <Networking>Default</Networking>
  <ClipboardRedirection>Enable</ClipboardRedirection>

  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Sandbox\Scripts</HostFolder>
      <SandboxFolder>C:\Scripts</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>

  <LogonCommand>
    <Command>powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\init.ps1"</Command>
  </LogonCommand>

</Configuration>

→ La sandbox démarre, le dossier est accessible, et le script init.ps1 se lance automatiquement.

Pour aller plus loin