通过远程桌面协议配置位置重定向

提示

本文适用于使用远程桌面协议 (RDP) 提供对 Windows 桌面和应用的远程访问的服务和产品。

使用本文顶部的按钮选择产品以显示相关内容。

可通过远程桌面协议 (RDP) 配置位置信息从本地设备到远程会话的重定向行为。 对于某些应用程序(例如浏览器中的地图和区域服务),用户的位置可能很重要。 如果不重定向位置信息,远程会话的位置就在用户为进行远程会话而连接的数据中心附近。

对于 Azure 虚拟桌面,必须在以下位置配置位置重定向。 如果这些组件中有任何组件配置不正确,位置重定向将无法按预期工作。 你可以使用组策略来配置会话主机和本地设备。

  • 会话主机
  • 主机池 RDP 属性
  • 本地设备

对于 Windows 365,必须在云电脑和本地设备上配置定位服务。 如果这些组件中的任一组件配置不正确,位置重定向将无法按预期工作。 你可以使用组策略来配置云电脑和本地设备。 Windows 365 允许位置重定向。

对于 Microsoft Dev Box,必须在开发箱和本地设备上配置定位服务。 如果这些组件中的任一组件配置不正确,位置重定向将无法按预期工作。 你可以使用组策略来配置开发箱和本地设备。 Microsoft Dev Box 允许位置重定向。

重要

已重定向的经度和纬度信息精确至 1 米。 水平精度目前设置为 10 千米,因此使用水平精度值的应用程序可能会报告无法确定精确位置。

本文介绍受支持的重定向方法,并介绍如何配置位置信息的重定向行为。 若要详细了解重定向的工作原理,请参阅通过远程桌面协议重定向

先决条件

在配置位置重定向之前,需要具备以下项:

  • 包含运行 Windows 11 企业版或 Windows 11 企业版多会话版本 22H2 或更高版本的会话主机的现有主机池。

  • 一个 Microsoft Entra ID 帐户,至少分配有主机池上内置的桌面虚拟化主机池参与者这一基于角色的访问控制 (RBAC) 角色。

  • 运行 Windows 11 企业版 22H2 版或更高版本的现有云电脑。
  • 运行 Windows 11 企业版 22H2 版或更高版本的现有开发箱。

会话主机配置

若要配置会话主机进行位置重定向,需要启用和配置定位服务。 你可以使用组策略执行此操作。

重要

如果使用多会话版本的 Windows,则在会话主机上启用定位服务时,将为所有用户启用它。 可根据你的要求,指定哪些应用可访问每个用户的位置信息。

云电脑配置

若要配置云电脑进行位置重定向,需要启用和配置定位服务。 你可以使用组策略执行此操作。

开发箱配置

若要配置开发箱进行位置重定向,需要启用和配置定位服务。 你可以使用组策略执行此操作。

选择方案的相关选项卡。

若要在不使用 Intune 的情况下启用定位服务,可使用组策略配置注册表值。 还可使用组策略配置位置重定向。 以这种方式配置定位服务不会阻止用户更改其设置。

  1. 在你用于管理 Active Directory 域的设备上打开“组策略管理”控制台。

  2. 创建或编辑面向提供你要配置的远程会话的计算机的策略。

  3. 配置组策略首选项以设置以下注册表值。 若要了解如何使用组策略首选项,请参阅配置注册表项。 可根据你的要求,指定哪些应用和服务可使用定位服务。

    1. 启用“定位服务”(需要为每个设备设置此值)

      • 键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location
      • 类型REG_SZ(字符串值)
      • 值名称Value
      • 值数据Allow
    2. 启用“允许位置替代”(需要为每个用户设置此值)

      • 键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CPSS\Store\UserLocationOverridePrivacySetting
      • 类型REG_DWORD(DWORD 值)
      • 值名称Value
      • 值数据1
    3. 启用“允许应用访问你的位置”(需要为每个用户设置此值)

      • 键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location
      • 类型REG_SZ(字符串值)
      • 值名称Value
      • 值数据Allow
    4. 启用“允许桌面应用访问你的位置”,例如Microsoft Edge(需要为每个用户设置此值)

      • 键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location\NonPackaged
      • 类型REG_SZ(字符串值)
      • 值名称Value
      • 值数据Allow
    5. 启用单个 Microsoft Store、MSIX 或 Appx 应用(需要为每个用户设置此值)。 将 <Package Family Name> 替换为应用的包系列名称,例如 Microsoft.BingWeather_8wekyb3d8bbwe。 可使用 Get-AppxPackage PowerShell cmdlet 获取应用及其包系列名称的列表。

      • 键:HKEY_CURRENT_USER\oftware\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location\<Package Family Name>
      • 类型REG_SZ(字符串值)
      • 值名称Value
      • 值数据Allow
  4. 确保未阻止位置重定向。 导航到“计算机配置”>“策略”>“管理模板”>“Windows 组件”>“远程桌面服务”>“远程桌面会话主机”>“设备和资源重定向”。

    显示组策略编辑器中的设备和资源重定向选项的屏幕截图。

  5. 双击“不允许位置重定向”策略设置将其打开。 若要启用位置重定向,请选择“已禁用”或“未配置”,然后选择“确定”。

  6. 确保将策略应用于提供远程会话的计算机,然后重启这些计算机,使设置生效。

主机池配置

Azure 虚拟桌面主机池设置“定位服务重定向”控制是否将位置信息从本地设备重定向到远程会话。 相应的 RDP 属性为 redirectlocation:i:<value>。 有关详细信息,请参阅支持的 RDP 属性

使用主机池 RDP 属性配置位置重定向:

  1. 登录到 Azure 门户

  2. 在搜索栏中,键入“Azure 虚拟桌面”,然后选择匹配的服务条目。

  3. 选择“主机池”,然后选择要配置的主机池

  4. 选择“RDP 属性”,然后选择“设备重定向”。

    显示 Azure 门户中“主机池设备重定向”选项卡的屏幕截图。

  5. 对于“定位服务重定向”,请选择下拉列表,然后选择“启用从本地设备的位置共享和向远程会话中的应用的重定向”

  6. 选择“保存”。

本地设备配置

需要使用受支持的应用和平台连接到远程会话并在本地设备上启用定位服务。 实现这一点的方式取决于你的要求、所使用的平台以及设备是托管设备还是非托管设备。

若要查看 Windows 应用和远程桌面应用中的重定向支持,请参阅跨平台和设备比较 Windows 应用功能跨平台和设备比较远程桌面应用功能

在 Windows 上,可在 Windows 设置应用中启用定位服务。 有关详细信息,请参阅 Windows 定位服务和隐私。 本文中用于使用组策略在远程会话中启用位置服务的步骤也可以应用于本地 Windows 设备。

若要在其他平台上启用定位服务,请参阅相关制造商的文档。

测试位置重定向

配置会话主机、主机池 RDP 属性和本地设备后,可测试位置重定向。

配置云电脑和本地设备后,可测试位置重定向。

配置开发箱和本地设备后,可测试位置重定向。

测试位置重定向:

  1. 在支持位置重定向的平台上,使用 Windows 应用或远程桌面应用连接到远程会话。 有关详细信息,请参阅跨平台和设备比较 Windows 应用功能跨平台和设备比较远程桌面应用功能

  2. 检查用户的位置信息在远程会话中可用。 下面是一些检查方式:

    1. 打开 Web 浏览器并转到使用位置信息的网站,例如必应地图。 在必应地图中,选择按钮“我的位置”的图标。 该网站应将用户的位置显示为本地设备的位置。

    2. 在远程会话中打开一个 PowerShell 提示符并运行以下命令,以获取纬度和经度值。 还可在本地 Windows 设备上运行这些命令,检查这些值是一致的。

      Add-Type -AssemblyName System.Device
      $GeoCoordinateWatcher = New-Object System.Device.Location.GeoCoordinateWatcher
      $GeoCoordinateWatcher.Start()
      
      Start-Sleep -Milliseconds 500
      
      If ($GeoCoordinateWatcher.Permission -eq "Granted") {
          While ($GeoCoordinateWatcher.Status -ne "Ready") {
              Start-Sleep -Milliseconds 500
          }
          $GeoCoordinateWatcher.Position.Location | FL Latitude, Longitude
      } else {
          Write-Output "Desktop apps aren't allowed to access your location. Please enable access."
      }
      

      输出与以下输出类似:

      Latitude           : 47.64354
      Longitude          : -122.13082