Windows 沙盒示例配置文件

示例 1 - 映射文件夹并在沙盒中测试未知下载的文件

以下配置文件可用于在沙盒中轻松测试未知下载的文件。 为了实现此测试,将禁用网络和 vGPU,并允许沙盒从主机以只读的方式访问下载文件夹,并放置在沙盒中的“temp”文件夹中。 为方便起见,登录命令在启动时会打开沙盒中的下载文件夹。

Downloads.wsb

<Configuration>
  <VGpu>Disable</VGpu>
  <Networking>Disable</Networking>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Users\Public\Downloads</HostFolder>
      <SandboxFolder>C:\temp</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>explorer.exe C:\temp</Command>
  </LogonCommand>
</Configuration>

示例 2 - 在沙盒中启动时安装Visual Studio Code

以下配置文件可在沙盒中安装 Visual Studio Code,这需要稍微复杂的 LogonCommand 设置。

两个文件夹映射到沙盒中;第一个 (SandboxScripts) 包含VSCodeInstall.cmd,用于安装和运行Visual Studio Code。 假定第二个文件夹 (CodingProjects) 包含开发人员希望使用Visual Studio Code修改的项目文件。

Visual Studio Code安装程序脚本已映射到沙盒后,<LogonCommand>可以引用它。

VSCodeInstall.cmd

应在主机上的 C:\SandboxScripts 目录中创建此批处理文件。 它将 VS Code 下载到 temp 沙盒中的文件夹,并从文件夹运行安装 temp

REM Download Visual Studio Code
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\temp\vscode.exe

REM Install and run Visual Studio Code
C:\temp\vscode.exe /verysilent /suppressmsgboxes

VSCode.wsb

<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\SandboxScripts</HostFolder>
      <SandboxFolder>C:\temp\sandbox</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
    <MappedFolder>
      <HostFolder>C:\CodingProjects</HostFolder>
      <SandboxFolder>C:\temp\Projects</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>C:\temp\sandbox\VSCodeInstall.cmd</Command>
  </LogonCommand>
</Configuration>

示例 3 - 映射文件夹并运行 PowerShell 脚本作为登录命令

从 Windows 11 版本 24H2 开始,Windows 沙盒遵循主机系统的鼠标设置。 如果你使用的是较旧的内部版本,并且主机系统设置为使用左手鼠标,则必须在Windows 沙盒启动时在 Windows 沙盒 中手动应用这些设置。 或者,可以使用沙盒配置文件运行登录命令来交换鼠标设置。

在此示例中, C:\sandbox 主机上的文件夹映射到 C:\sandbox 沙盒中的 文件夹,因此 SwapMouse.ps1 可以在沙盒配置文件中引用脚本。

SwapMouse.ps1

使用以下代码创建 PowerShell 脚本,并将其作为 SwapMouse.ps1 保存在 C:\sandbox 目录中。

[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null

$SwapButtons = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern bool SwapMouseButton(bool swap);
'@ -Name "NativeMethods" -Namespace "PInvoke" -PassThru

$SwapButtons::SwapMouseButton(!([System.Windows.Forms.SystemInformation]::MouseButtonsSwapped))

SwapMouse.wsb

<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\sandbox</HostFolder>
      <SandboxFolder>C:\sandbox</SandboxFolder>
      <ReadOnly>True</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>powershell.exe -ExecutionPolicy Bypass -File C:\sandbox\SwapMouse.ps1</Command>
  </LogonCommand>
</Configuration>