

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 映射服务器消息块（SMB）网络驱动器
<a name="map-smb-network-drives"></a>

您可以使用目标网络下的任何计算机 SMBs。如果您希望通过会话脚本配置设置，则需要首先创建一个在用户登录时调用的脚本，因为会话脚本是针对每个映像进行配置的。

要映射服务器消息块（SMB）网络驱动器，请执行以下步骤。

## 步骤 1：确保服务正在运行
<a name="smb-start"></a>

从“开始”菜单中，打开 **services.msc** 并确保以下服务全部运行：
+ DNS 客户端
+ 功能发现资源发布
+ SSDP 发现
+ UPnP 设备主机

## 步骤 2：创建 SMB 文件夹
<a name="create-smb-server-manager"></a>

您可以使用文件资源管理器创建 SMB。

**使用文件资源管理器配置您的 SMB 共享文件夹**

1. 右键单击 SMB 文件夹，然后选择**属性**、**共享**。

1. 选择**高级共享**。

1. 对于**高级共享**，选中**共享此文件夹**，然后选择**权限**。

1. 如果您想为所有用户提供权限，请将其保留为默认设置。

   如果要添加特定用户，请在**共享权限**下选择**所有人**、**删除**。然后选择**添加**，并输入要访问文件共享的用户或组。

   对于您添加的每个用户或组，请选择**允许**以分配**完全控制**、**更改**或**读取权限**。

1. 依次选择**应用**、**确定**、**确定**和**关闭**。

## 步骤 3：验证 SMB 是否可在域中访问
<a name="verify-smb"></a>

从另一台使用相同安全组并加入相同域的服务器打开文件资源管理器。导航到网络路径文件夹，通过提供的网络路径访问网络共享。依次选择**属性**、**共享**和**网络路径**。

## 步骤 4：允许用户通过 local/domain 组策略创建符号链接
<a name="enable-smlink-smb"></a>

启用从 local/domain 组策略为用户创建符号链接，以确保在组策略中定义会话脚本或登录脚本。这使您能够在步骤 5 中创建具有用户权限的脚本。

**使用户能够通过 local/domain 组策略创建符号链接**

1. 在用于定义此策略的 GPO 中，依次选择**计算机配置**、**Windows 设置**、**安全设置**、**用户权限分配**、**策略**和**创建符号链接**。然后，更新用户要包含的权限。有关创建符号链接的更多信息，请参阅[创建符号链接](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/create-symbolic-links)。

1. 默认情况下， remote-to-remote（例如，符号链接映射到另一个类似符号链接中的网络共享）和 remote-to-local（例如，在映射到网络共享的符号链接中映射到本地共享的符号链接）访问处于禁用状态。如果需要进行符号链接映射，请运行以下命令：
   + 要启用 remote-to-remote访问权限-`fsutil behavior set SymlinkEvaluation R2R:1`
   + 要启用 remote-to-local访问权限-`fsutil behavior set SymlinkEvaluation R2L:1 `

## 步骤 5：创建在用户登录时调用的脚本
<a name="create-script-smb"></a>

使用 WorkSpaces 应用程序会话脚本或 GPO 登录脚本创建在用户登录时调用的脚本。如果您选择使用 WorkSpaces 应用程序会话脚本，则会话脚本将仅应用于该特定的 WorkSpaces 应用程序映像。如果您使用 GPO 登录脚本，则 GPOs 会应用于域/OU，可以将其配置到您的队列中。这样，您就无需为所拥有的每个映像配置脚本了。

### 选项 1：使用会话脚本将 SMB 共享文件夹挂载到“我的文件”下（使用 Powershell）
<a name="powershell-smb"></a>

**使用会话脚本将 SMB 共享文件夹挂载到“我的文件”下（使用 Powershell）**

1. 成功定义用户权限后，使用用户上下文或系统上下文配置以下示例脚本。

   以下是使用用户上下文的 config.json 脚本示例。

   ```
   "SessionStart": {
       "executables": [
       {
           "context": "system",
           "filename": "",
           "arguments": "",
           "s3LogEnabled": true
       },
       {
           "context": "user",
           "filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
           "arguments": "-File \"C:\\AppStream\\SessionScripts\\userStart.ps1\"",
           "s3LogEnabled": true
       }
    ],
   "waitingTime": 30
   ```

   以下是使用系统上下文的示例脚本。

   ```
   "SessionStart": {
       "executables": [
       {
           "context": "system",
           "filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
           "arguments": "-File \"C:\\AppStream\\SessionScripts\\systemStart.ps1\"",
           "s3LogEnabled": true
       },
       {
           "context": "user",
           "filename": "",
           "arguments": "",
           "s3LogEnabled": true
       }
    ],
   "waitingTime": 30
   ```

1. 如果您使用的是多会话实例集，则可以使用系统环境变量 `$env:AppStream_Session_UserName` 导航到用户的“我的文件”文件夹。这允许在使用系统上下文 `$env:USERNAME` 时映射到 `Admin` 而不是用户名。

   ```
   # Define the target application path
   $targetPathes = "<SMB-PATH>"
   
   # Define the shortcut location
   $symlinkLocation = "C:\Users\$Env:AppStream_Session_UserName\My Files\Custom Folder"
   
   # Create the junction for Custom Home Folder under MyFiles
   New-Item -ItemType SymbolicLink -Path $symlinkLocation -Target $targetPaths
   ```

### 选项 2：使用 GPO 登录脚本将 SMB 共享文件夹挂载到“我的文件”下
<a name="powershell-gpo-logon"></a>

1. 通过创建指向文件或文件夹的符号链接来挂载 SMB 共享文件夹。有关更多信息，请参阅[示例 7：创建指向文件或文件夹的符号链接](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.                                         management/new-item?view=powershell-7.4#example-7-create-a-symbolic-link-to-a-file-or-folder)

1. [分配用户登录脚本。](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-                                 2012-r2-and-2012/dn789196(v=ws.11)#how-to-assign-user-logon-scripts)

1. 添加以下脚本为“我的文件”下的“自定义主文件夹”创建联接。

   ```
   # Define the target application path
   $targetPathes = "<SMB-PATH>"
   
   # Define the shortcut location
   $symlinkLocation = "C:\Users\$env:Username\My Files\Custom Folder"
   
   # Create the junction for Custom Home Folder under MyFiles
   New-Item -ItemType SymbolicLink -Path $symlinkLocation -Target $targetPaths
   ```

   如果您使用的是 Windows Server 2022 映像，则可能会遇到一个问题，即只有在登录脚本成功完成后才能创建“我的文件”文件夹。这可能会导致在通过登录脚本完成 SMB 挂载操作时出现超时。要解决此问题，在挂载 SMB 的同时，请执行以下操作，使用登录脚本触发独立进程 (`Start-Process`)：

   1. 创建登录脚本。

      ```
      # Define the log file path
      $logFilePath = "<This-is-where-your-log-files-are-saved>"
      
      # Function to write log messages
      function Write-Log {
          param (
              [string]$message
          )
          $timestamp = get-date -format "yyyy-MM-dd HH:mm:ss"
          $logMessage = "$timestamp - $message"
          $logMessage | Out-File -FilePath $logFilePath -Append -Encoding UTF8
      }
      
      try {
          Write-Log "Setting execution policy..."
          Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
          Write-Log "Unblocking logon script file..."
          $filePath = "<This-is-where-your-actual-logon-script-is-linked>"
          Unblock-File -Path $filePath
          Write-Log "Running actual logon script..."
          Start-Process -FilePath 'Powershell.exe' -ArgumentList "-File `"$filePath`""
      } catch {
          Write-Log "An error occurred: $_" "ERROR"
      }
      ```

   1. 如果需要，请使用组策略更新此登录脚本延迟配置。有关更多信息，请参阅[配置登录脚本延迟](https://admx.help/?Category=Windows_8.1_2012R2&Policy=Microsoft.Policies.GroupPolicy::LogonScriptDelay)。登录脚本延迟将是触发异步登录脚本之前的延迟时间。默认延迟为 5 分钟。

   1. 重启实例集以应用登录脚本延迟。