自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/VBA/GAS/JavaScript/Raspberry Piなどで色んなことを自動化

Windows Sandboxをよく使うならwsbファイルでいろいろ設定しておくと楽

以前にも書いた超お手軽に使い捨て仮想マシンを立ち上げられるWindows Sandbox。

codelife.cafe

最近ではかなり進化していて、ホストOSとのフォルダ共有やログオンスクリプトなどの設定をあらかじめ定義しておける.wsbファイルなるものがある。 メモ帳とかで構成を定義して sandbox.wsb のような名前で保存。ダブルクリックで実行するとWindows Sandboxが立ち上がる。

ただのXMLファイルといえばそうだけど書き方メモっておかないと忘れるので書いておく。

よく使う設定

<Configuration>

  <!-- メモリ8GB -->
  <MemoryInMB>8192</MemoryInMB>

  <!-- ネットワークを無効化 -->
  <Networking>Disable</Networking>

  <!-- ホストマシンと特定のフォルダを共有 -->
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\sandbox</HostFolder>
      <SandboxFolder>C:\sandbox</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>

  <!-- 起動時にスクリプト実行 -->
  <LogonCommand>
    <Command>C:\sandbox\logon.cmd</Command>
  </LogonCommand>

</Configuration>

wsbファイルの基本構造

wsbファイルはXML形式で記述され、以下のような基本構造。

<Configuration>
  <!-- 設定項目をここに記述 -->
</Configuration>

設定項目一覧

タグ 意味 設定値
<VGpu> 仮想GPUの有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<Networking> ネットワークの有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<MappedFolders> ホストとサンドボックス間でフォルダーを共有 <MappedFolder>タグ内で詳細設定を記述
<LogonCommand> 起動時に実行するコマンド <Command>タグ内にコマンドを記述
<AudioInput> オーディオ入力の有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<VideoInput> ビデオ入力の有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<ProtectedClient> RDPセッションのセキュリティ設定を強化 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<PrinterRedirection> プリンターのリダイレクト有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<ClipboardRedirection> クリップボードのリダイレクト有効/無効 Enable(有効化)Disable(無効化)Default(デフォルト設定)
<MemoryInMB> サンドボックスに割り当てるメモリ容量(MB単位) 数値(例: 1024, 2048)

フォルダー共有設定例

タグ 意味 設定値
<MappedFolder> 共有するフォルダーを設定
<HostFolder> ホスト側フォルダーの絶対パス C:\Users\user\Documents
<SandboxFolder> サンドボックス側のパス C:\Users\WDAGUtilityAccount\Documents
<ReadOnly> 読み取り専用設定 true(有効化)false(無効化)

サンドボックスのユーザー名は WDAGUtilityAccount に固定されているためデスクトップを共有したければ次のようになる

<MappedFolders>
  <MappedFolder>
    <HostFolder>C:\Users\user\Desktop</HostFolder>
    <SandboxFolder>C:\Users\WDAGUtilityAccount\Desktop</SandboxFolder>
    <ReadOnly>true</ReadOnly>
  </MappedFolder>
<MappedFolders>

MappedFolder は複数設定することもできる

<MappedFolders>
  <MappedFolder>
    <HostFolder>C:\Users\user\Documents</HostFolder>
    <SandboxFolder>C:\Users\WDAGUtilityAccount\Documents</SandboxFolder>
    <ReadOnly>true</ReadOnly>
  </MappedFolder>
  <MappedFolder>
    <HostFolder>C:\scripts</HostFolder>
    <SandboxFolder>C:\scripts</SandboxFolder>
    <ReadOnly>true</ReadOnly>
  </MappedFolder>
<MappedFolders>

設定例

基本設定

以下は、ネットワークを無効化し、仮想GPUを無効化した設定例。

<Configuration>
  <VGpu>Disable</VGpu>
  <Networking>Disable</Networking>
</Configuration>

フォルダー共有と起動コマンドの設定

ホストのC:\Users\user\Desktop\sharedフォルダーをサンドボックスのC:\Sharedに共有し、起動時にメモ帳を開く設定例。

<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Users\user\Desktop\shared</HostFolder>
      <SandboxFolder>C:\Shared</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>notepad.exe</Command>
  </LogonCommand>
</Configuration>

メモリ割り当てとクリップボード無効化

サンドボックスに2048MBのメモリを割り当て、クリップボード共有を無効化した設定例。

<Configuration>
  <MemoryInMB>2048</MemoryInMB>
  <ClipboardRedirection>Disable</ClipboardRedirection>
</Configuration>

ログオンスクリプトによって7-zipをインストール

  • ホストOSの C:\sandbox7z2409-x64.exelogon.cmd を置いておく
  • logon.cmd に7-zipなどのアプリのサイレントインストールコマンドを書いておく
  • ホストOSの C:\sandbox を サンドボックスの C:\sandbox にマッピング
  • LogonCommand 設定にて logon.cmd が実行されるようにする

sandbox.wsb ファイル

<Configuration>
   <!-- ホストマシンと特定のフォルダを共有 -->
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\sandbox</HostFolder>
      <SandboxFolder>C:\sandbox</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>

  <!-- 起動時にスクリプト実行 -->
  <LogonCommand>
    <Command>C:\sandbox\logon.cmd</Command>
  </LogonCommand>
</Configuration>

logon.cmd ファイル

C:\sandbox\7z2409-x64.exe /S

まとめ

  • ファイル名: wsbファイルは.wsb拡張子で保存する必要あり。
  • 文字コード: UTF-8形式で保存。
  • セキュリティリスク: フォルダー共有やネットワークを有効化する場合、ホストOSへの影響を考慮すること(Cドライブまるごと共有とかしてたらサンドボックスの意味があまり無い気がする)。
  • 惜しいところ: 現状ウィンドウサイズを設定する項目は無いらしい(これ地味に一番欲しいと思うんだけど)