メインコンテンツまでスキップ

Windowsサンドボックス

Windowsサンドボックスは手軽にクリーンなWindows環境を作成して、アプリケーションのテストが行える機能です.別途ライセンスを購入する必要はなく、既存のライセンスで使用できます.Windows 10 や Windows 11 から使用できます.しかし、Homeエディションでは正式にサポートされていません.今回は、Windowsサンドボックスを使う機会があったので、ここにまとめておきます.環境は次の通りです.

Windows 11 Pro 22H2

また、本文の中で <user> と表記しているものは、お使いのPCのユーザー名に置き換えてください.

Windowsサンドボックスを有効にする

詳しい手順は下記を参考にしてください.

https://learn.microsoft.com/ja-jp/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview

基本的な環境

構築する環境は WinGet, PowerShell, WindowsTerminal の3つ(最新版)をインストールした状態にすることです.この3つがあれば、その後の環境構築が快適です.ただし、簡単には行きません.また、Windowsサンドボックスは言語が英語ですが、日本語に対応する方法も紹介します.では、手順を追って説明します.

Microsoft Store

WinGet があれば PowerShellWindowsTerminal もインストールできるはずです.しかし、WindowsサンドボックスにはMicrosoft Storeがありません.Microsoft Store経由でなく、直接 WinGet をインストールする必要があります.また、WinGetを使ってPowerShell はインストールできますが、WindowsTerminal はインストールに失敗します.なので、別の方法でインストールする必要があります.

Windowsサンドボックスは毎回クリーンな環境となるので、その度にダウンロードするのは時間のムダです.ですから、3つともあらかじめダウンロードしておいて、インストールします.

それぞれのバージョンは次の通りです.

Windows Package Manager 1.4.10173
PowerShell 7.3.2
Windows Terminal 1.16.10262.0

バイナリのダウンロード

WinGet

まず、WinGet は以下からダウンロードできます.

WinGet

Releases から Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle をダウンロードします.また、VC++ v14 Desktop Framework Package も必要ですので、こちらもダウンロードしておきます(Microsoft.VCLibs.x64.14.00.Desktop.appx). リンクは上記のページにあります.

備考

Microsoft.VCLibs.x64.14.00.Desktop.appxは同名でもビルド番号が違ったりするので、そのときの最新版を合わせておく必要があります.

PowerShell

PowerShellのバイナリは以下からダウンロードできます.

PowerShell

stable版を使います. PowerShell-7.3.2-win-x64.msiファイルをダウンロードします.

Windows Terminal

Windows Terminalのバイナリは以下からダウンロードできます.

Windows Terminal

ReleasesからMicrosoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundleをダウンロードします.

また、他にも Microsoft.UI.Xaml.x64.2.7 バンドルが必要です.これもバージョンを合わせる必要があり、2.7.3を使用します.下記サイトにあるDownload packageリンクからダウンロードできます.

Microsoft.UI.Xaml 2.7.3

ダウンロードしたmicrosoft.ui.xaml.2.7.3.nupkgはNuGetパッケージですが、必要なのは中に含まれている Microsoft.UI.Xaml.2.7.appx です.nupkgはzipなので、展開して ./Tools/AppX/x64/Release/Microsoft.UI.Xaml.2.7.appx を取り出します.取り出したら、x64アーキテクチャとわかるように Microsoft.UI.Xaml.x64.2.7.appx に名前を変えておきます.

Sandboxフォルダ

これまでダウンロードした以下のファイルを、 C:\Users\<user>\Sandboxフォルダに入れておきます.フォルダがなければ任意のフォルダ名を作成して入れてください.

  • Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
  • Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle
  • Microsoft.VCLibs.x64.14.00.Desktop.appx
  • Microsoft.UI.Xaml.x64.2.7.appx
  • PowerShell-7.3.2-win-x64.msi

Windowsサンドボックス構成ファイル

Windowsサンドボックスのカスタマイズパラメータを記述する構成ファイルを用意します.拡張子は .wsb です.ファイルはXML形式です.

まず、Windowsサンドボックスでのユーザー名は WDAGUtilityAccount 固定です.ここでは、ダウンロードしたフォルダをマウントする設定を追加します.マウント先はホームフォルダ内の Mount とします.Sandbox.wsb ファイルを作成し、内容を次のようにします.

<Configuration>
<MappedFolders>
<MappedFolder>
<SandboxFolder>C:\users\WDAGUtilityAccount\Mount</SandboxFolder>
<HostFolder>C:\users\<user>\Sandbox</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
</Configuration>

このファイルはどこに置いても構いません.私はSandboxフォルダ内に入れています.このファイルを実行すれば、Windowsサンドボックスが起動します.起動しない場合、Windowsサンドボックスに関連付けておくと便利です.

スクリプトファイル

Windowsサンドボックスを実行する前に、いくつかスクリプトファイルを作成しておきます.これらはSandboxフォルダに入れておきます.スクリプトファイルは PowerShell です.個別に作成していますが、1つのまとまったスクリプトファイルにすることもできます

ポリシー

まず、PowerShellスクリプトファイルを実行するためにポリシーを設定する必要があります.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

コピペでもいいのですが、それも面倒なので policy というテキストファイルを用意して上記の内容にします.

WinGetインストールスクリプト

WinGetのインストールスクリプト install-winget.ps1 を作成します.内容は次のようになっています.

Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.VCLibs.x64.14.00.Desktop.appx
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

Add-AppPackageはPowerShellのコマンドレットで、パッケージのインストールを行います.

PowerShellインストールスクリプト

PowerShell 7.3.2 のインストールスクリプト install-powershell.ps1 を作成します.内容は次のようになっています.

Start-Process msiexec -ArgumentList "/i PowerShell-7.3.2-win-x64.msi /passive" -Wait

もし、WinGet経由でインストールする場合、次のようにします.

winget install -e --id Microsoft.PowerShell --source winget

WindowsTerminalインストールスクリプト

WindowsTerminalのインストールスクリプト install-terminal.ps1 を作成します.内容は次のようになっています.

Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.UI.Xaml.x64.2.7.appx
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle

環境構築スクリプト

WinGet, PowerShell, WindowsTerminalの環境を構築するスクリプト setup-en.ps1 を作成します.内容は次の通りです.

./install-winget.ps1
./install-powershell.ps1
./install-terminal.ps1

これとは別に日本語版に対応した環境構築スクリプト setup-ja.ps1 も用意します.内容は次の通りです.

Set-WinUserLanguageList -Force ja-JP
Set-Culture -CultureInfo ja-JP
./install-winget.ps1
./install-powershell.ps1
./install-terminal.ps1

Set-WinUserLanguageListSet-Culture で日本語を指定しています.これは一番最初に設定しなければなりません.

Sandboxフォルダの中身

この時点で、Sandboxフォルダの中身は次のようになっています.

📁Sandbox/
├──📄install-powershell.ps1
├──📄install-terminal.ps1
├──📄install-winget.ps1
├──📄Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
├──📄Microsoft.UI.Xaml.x64.2.7.appx
├──📄Microsoft.VCLibs.x64.14.00.Desktop.appx
├──📄Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle
├──📄policy
├──📄PowerShell-7.3.2-win-x64.msi
├──📄Sandbox.wsb
├──📄setup-en.ps1
└──📄setup-ja.ps1

Windowsサンドボックス

準備が整ったので、Windowsサンドボックスを使います. Sandbox.wsbを使用してWindowsサンドボックスを起動します.

Windows Sandbox

次に PowerShell を起動します.

PowerShell

カレントディレクトリが C:\Users\WDAGUtilityAccount になっています.マウント先のフォルダは C:\Users\WDAGUtilityAccount\Mount ですので、そこに移動します.

PS > cd Mount

まず、ポリシーを適用します.

PS > gc policy | iex

gcGet-Contentコマンドレットのエイリアスで、policyファイルの中身を取り出します.それをパイプで iex に渡しています.iexInvoke-Expressionコマンドレットのエイリアスで、渡された文字列をコマンドとして実行します.これでPowerShellスクリプトファイルを実行できますので、setup-en.ps1 (日本語なら setup-ja.ps1)を実行して構築します.

PS > ./setup-en.ps1

または

PS > ./setup-ja.ps1

スクリプトが正常終了してセットアップが完了したら、PowerShell画面を閉じて、ターミナルを起動します.

Windows Terminal

これで完了です.WinGetを使って他のアプリケーションをインストールできます.

以上です.参考になれば幸いです.