◆ 構成ファイルで Sandbox をカスタムできる
  ◆ ホストフォルダを Sandbox から参照できるように設定
  ◆ 起動時に実行するコマンドを設定
◆ ホストフォルダにインストーラを配置して 起動時のコマンドでインストールさせる

Windows Sandbox は Windows の標準機能で クリーンな環境で試したいときとか 普段遣いの環境にはインストールしたくないものを一時的に使いたいときにすごく便利です
ただ Docker のように インストールしたりファイルを設置した状態を保存して 毎回それを起動するということはできません
毎回完全にクリーンな状態に戻ります
毎回使うようなソフトは Sandbox の起動のたびに毎回インストールしないといけません

これを楽にするために構成ファイルを使うことができるのですが 調べたり準備するのが面倒でこれまで使ってませんでした
そろそろ使おうかなと思ったので使ってみます

構成ファイルは wsb という拡張子のテキストファイルです
Windows Sandbox が入ってれば wsb という拡張子にすると Windows Sandbox に関連付けられます
普通にダブルクリックで wsb ファイルを開くと Windows Sandbox が起動します

wsb ファイル

wsb ファイルの中身は XML で設定を記述します

<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\Data\wsbdir</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\wsbdir\init.cmd</Command>
</LogonCommand>
</Configuration>

フォルダ共有

MappedFolders には Sandbox 内からアクセスしたいホスト環境のフォルダを指定します
ReadOnly を true にすると 読み取り専用になって Sandbox から編集できません
ここで指定したフォルダは Sandbox 内のデスクトップフォルダ内にマッピングされます

この例だとホスト環境の C:\Data\wsbdir は Sandbox 内からは C:\Users\WDAGUtilityAccount\Desktop\wsbdir でアクセスできます

起動時に実行するコマンド

LogonCommand には起動時に実行するコマンドを指定します
例だと C:\Users\WDAGUtilityAccount\Desktop\wsbdir\init.cmd を実行します
ホスト環境にある C:\Data\wsbdir\init.cmd です

XML 構造的に複数のコマンドを実行するなら 「<Command></Command>」 を複数書けば良さそうですが 複数コマンドは対応していないみたいです
複数書いても 2 つ目以降は実行されませんでした
一つの Command 内に 「command1 & command2」 形式で書けばできるかと思って試しましたが これもダメでした
単純に & だと XML 構文的に不正で &amp; にしないといけないですが これでもうまく動きません
「cmd /C ""」 の中に書かないとダメかもです
ですが そんな複雑なことをするくらいならスクリプトの実行にしたほうが扱いやすいです
そういうわけで Command では init.cmd の実行だけにしています

個人的にほぼ毎回のようにインストールするのは Node.js と VSCode です
この 2 つを インストールする wsb ファイルを作ってみます

少しでも起動時間を短くしたいので 毎回インストーラをダウンロードせずにホスト環境の Sandbox へ共有するフォルダにインストーラを保存しておいて それを参照することにします
この Sandbox 用に C:\Data\wsb\vsnode フォルダを用意します
このフォルダに Node.js と VSCode のインストーラを配置します
またインストールを実行するスクリプトも合わせて配置します

C:\Data\wsb\vsnode の中身はこうなります
ファイル名は現時点の最新版のバージョンのものです

  • node-v14.17.4-x64.msi
  • VSCodeUserSetup-x64-1.59.0.exe
  • init.cmd

init.cmd の中身はそれぞれのインストーラをユーザ操作なしに実行させるものです

start msiexec /i C:\Users\WDAGUtilityAccount\Desktop\vsnode\node-v14.17.4-x64.msi /passive
start C:\Users\WDAGUtilityAccount\Desktop\vsnode\VSCodeUserSetup-x64-1.59.0.exe /SILENT

順番にインストールすると時間がかかるので start コマンドを使って並列に実行して同時にインストールします

最後に wsb ファイルを用意します

vsnode.wsb
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\Data\wsb\vsnode</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\vsnode\init.cmd</Command>
</LogonCommand>
</Configuration>

あとはこの wsb ファイルをダブルクリックで実行します
Sandbox が起動すると Node.js と VSCode のインストーラが自動で起動してインストールされるはずです

注意

こういう感じでインストーラの追加とその実行をスクリプトに加えることで色々インストールできますが インストールには時間がかかります
使うかもしれないもの全部入りの Sandbox を毎回作るのではなく 用途ごとに wsb ファイルを作って そのときに必要な構成で Sandbox を起動するのが良いです