映射服务器消息块(SMB)网络驱动器 - Amazon AppStream 2.0

映射服务器消息块(SMB)网络驱动器

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

要映射服务器消息块(SMB)网络驱动器,请执行以下步骤。

步骤 1:确保服务正在运行

从“开始”菜单中,打开 services.msc 并确保以下服务全部运行:

  • DNS 客户端

  • 功能发现资源发布

  • SSDP 发现

  • UPnP 设备主机

步骤 2:创建 SMB 文件夹

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

使用文件资源管理器配置您的 SMB 共享文件夹
  1. 右键单击 SMB 文件夹,然后选择属性共享

  2. 选择高级共享

  3. 对于高级共享,选中共享此文件夹,然后选择权限

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

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

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

  5. 依次选择应用确定确定关闭

步骤 3:验证 SMB 是否可在域中访问

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

允许您的用户根据本地/域组策略创建符号链接,以确保在组策略中定义会话脚本或登录脚本。这使您能够在步骤 5 中创建具有用户权限的脚本。

使用户能够根据本地/域组策略创建符号链接
  1. 在用于定义此策略的 GPO 中,依次选择计算机配置Windows 设置安全设置用户权限分配策略创建符号链接。然后,更新用户要包含的权限。有关创建符号链接的更多信息,请参阅创建符号链接

  2. 默认情况下,远程到远程(例如,一个符号链接映射到另一个类似符号链接内的网络共享)和远程到本地(例如,一个符号链接映射到网络共享内的符号链接所映射的本地共享)访问处于禁用状态。如果需要进行符号链接映射,请运行以下命令:

    • 对于启用远程到远程访问 - fsutil behavior set SymlinkEvaluation R2R:1

    • 要对于启用远程到本地访问 - fsutil behavior set SymlinkEvaluation R2L:1

步骤 5:创建在用户登录时调用的脚本

通过使用 AppStream 2.0 会话脚本或 GPO 登录脚本,创建一个在用户登录时调用的脚本。如果您选择使用 AppStream 2.0 会话脚本,则会话脚本将仅应用于该特定的 AppStream 2.0 映像。如果您使用 GPO 登录脚本,GPO 将应用于域/OU,这些域/OU 可以配置到您的实例集中。这样,您就无需为所拥有的每个映像配置脚本了。

使用会话脚本将 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
  2. 如果您使用的是多会话实例集,则可以使用系统环境变量 $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
  1. 通过创建指向文件或文件夹的符号链接来挂载 SMB 共享文件夹。有关更多信息,请参阅示例 7:创建指向文件或文件夹的符号链接

  2. 分配用户登录脚本。

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

    # 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" }
    2. 如果需要,请使用组策略更新此登录脚本延迟配置。有关更多信息,请参阅配置登录脚本延迟。登录脚本延迟将是触发异步登录脚本之前的延迟时间。默认延迟为 5 分钟。

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