通过远程桌面协议在 Windows 上配置 USB 重定向

提示

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

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

可以通过远程桌面协议 (RDP) 在本地 Windows 设备和远程会话之间配置某些 USB 外设的重定向。

重要

本文介绍仅使用不透明低级别重定向的 USB 设备。 使用高级别重定向的 USB 设备的相关介绍包含在针对特定设备类型的文章中。 应尽可能使用高级重定向方法。

有关哪些设备类型使用哪种重定向方法的列表,请参阅支持的资源和外设。 使用不透明低级别重定向方法重定向的外设需要在远程会话中安装驱动程序。

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

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

默认情况下,主机池 RDP 属性将重定向所有受支持的 USB 外设,但你也可以指定要重定向或要从重定向中排除的单个 USB 外设,并重定向整个设备设置类,例如多媒体外设。 配置重定向设置时要小心,因为这会导致最具限制性的设置。

某些 USB 外设可能具有使用不透明低级 USB 重定向或高级重定向的功能。 默认情况下,这些外设使用高级重定向进行重定向。 也可以按照本文中的步骤强制这些外设使用不透明低级别 USB 重定向。

对于 Windows 365,必须在云电脑和本地设备上配置 USB 重定向。 如果这些组件中有任何一个配置不正确,USB 重定向将无法按预期工作。 你可以使用组策略来配置云电脑和本地设备。 配置后,Windows 365 会重定向所有受支持的 USB 外设。

对于 Microsoft Dev Box,必须在开发箱和本地设备上配置 USB 重定向。 如果这些组件中有任何一个配置不正确,USB 重定向将无法按预期工作。 你可以使用组策略来配置开发箱和本地设备。 配置后,Microsoft Dev Box 会重定向所有受支持的 USB 外设。

提示

如果在远程会话中使用以下功能,则它们有自己的优化,这些优化独立于会话主机、主机池 RDP 属性或本地设备上的重定向配置。

提示

如果在远程会话中使用以下功能,则它们有自己的优化,这些优化独立于云电脑或本地设备上的重定向配置。

提示

如果在远程会话中使用以下功能,则它们有自己的优化,这些优化独立于开发箱或本地设备上的重定向配置。

先决条件

在使用不透明低级别重定向配置 USB 重定向之前,需要具有以下项:

  • 具有会话主机的主机池。

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

  • 现有的云电脑。
  • 现有的开发箱。

会话主机配置

要使用不透明低级别重定向针对 USB 重定向配置会话主机,需要启用即插即用重定向。 你可以使用组策略执行此操作。

云电脑配置

要使用不透明低级别重定向针对 USB 重定向配置云电脑,需要启用即插即用重定向。 你可以使用组策略执行此操作。

开发箱配置

要使用不透明低级别重定向针对 USB 重定向配置开发箱,需要启用即插即用重定向。 你可以使用组策略执行此操作。

默认配置为:

  • Windows 操作系统:不允许使用 USB 重定向

选择方案的相关选项卡。

若要允许或禁用视频捕获重定向(包括摄像头和网络摄像头),请使用组策略:

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

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

  3. 导航到“计算机配置”>“策略”>“管理模板”>“Windows 组件”>“远程桌面服务”>“远程桌面会话主机”>“设备和资源重定向”。

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

  4. 双击“不允许受支持的即插即用设备重定向”策略设置以将其打开。 选择“禁用”,然后选择“确定”。

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

重要

通过不透明低级别 USB 重定向,重定向 USB 外设的驱动程序将使用与插入设备时物理 Windows 计算机使用的相同进程安装在远程会话中。 请确保在远程会话中启用了 Windows 更新,或者驱动程序可用于重定向的 USB 外设。

本地 Windows 设备配置

若要使用不透明低级别别重定向针对 USB 重定向配置本地 Windows 设备,需要允许用户和管理员对其他受支持的 USB 外设进行 RDP 重定向。 你可以使用组策略执行此操作。

默认配置为:

  • Windows 操作系统:其他受支持的 USB 外设无法使用任何用户帐户进行 RDP 重定向。

要允许使用组策略对其他受支持的 USB 外设进行 RDP 重定向,请执行以下操作:

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

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

  3. 导航到“计算机配置”>“策略”>“管理模板”>“Windows 组件”>“远程桌面服务”>“远程桌面连接客户端”>“RemoteFX USB 设备重定向”

    显示组策略编辑器中客户端 USB 设备重定向选项的屏幕截图。

  4. 双击“允许从此计算机对其他受支持的 RemoteFX USB 设备进行 RDP 重定向”策略设置以将其打开。 选择已启用

  5. 在“RemoteFX USB 重定向访问权限”下拉列表中,选择“管理员和用户”,然后选择“确定”

  6. 确保将策略应用到本地 Windows 设备后,必须重启它们才能使 USB 重定向运行正常。

可选:检索要用于不透明低级别重定向的特定 USB 设备实例 ID

可选:使用不透明低级别重定向发现要重定向的可用设备

对于 Azure 虚拟桌面,可以在主机池属性中输入特定的设备实例 ID,以便仅重定向你批准的外设。 检索要重定向的本地设备上 USB 设备的可用设备实例 ID:

Windows 365 会重定向所有支持的外设,以实现连接到本地设备的不透明低级别重定向。 发现设备:

Microsoft Dev Box 会重定向所有支持的外设,以实现连接到本地设备的不透明低级别重定向。 发现设备:

  1. 在本地设备上,连接要重定向的任何设备。

  2. 从“开始”菜单打开远程桌面连接应用,或者从命令行运行 mstsc.exe

  3. 选择“显示选项”,然后选择“本地资源”选项卡

    显示远程桌面连接应用的“本地资源”选项卡的屏幕截图。

  4. 在“本地设备和资源”部分,选择“更多...”

  5. 从设备和资源列表中,选中“其他受支持的 RemoteFX USB 设备”框。 仅当启用本地 Windows 设备配置部分介绍的“允许从此计算机重定向其他受支持的 RemoteFX USB 设备”设置时,才会显示此选项。 可以选择 +(加号)图标来展开列表,并查看哪些设备可以使用不透明低级别重定向进行重定向。

    显示使用不透明低级别重定向的可用 USB 外设示例的屏幕截图。

  6. 在“确定”,关闭“本地设备和资源”

  7. 选择“常规”选项卡,然后选择“另存为...”并保存 .rdp 文件

  8. 在本地设备上打开 PowerShell 提示符。

  9. 运行以下命令,将每个受支持的 USB 设备名与 USB 实例 ID 匹配。 需要替换之前保存的 .rdp 文件的 <placeholder> 值。

    $rdpFile = "<RDP file path>"
    
    $testPath = Test-Path $rdpFile
    If ($testPath) {
    
       # Function used for recursively getting all child devices of a parent device
       Function Lookup-Device-Children {
           [CmdletBinding()]
           Param(
               [Parameter(Mandatory, ValueFromPipeline)]
               [ValidateNotNullOrEmpty()]
               [object] 
               $ChildDeviceIds
           )
    
           foreach ($childDeviceId in $childDeviceIds) { 
               $pnpDeviceProperties = Get-PnpDeviceProperty -InstanceId $childDeviceId
    
               [string]$childDevice = ($pnpDeviceProperties | ? KeyName -eq DEVPKEY_NAME).Data
               Write-Output "    $childDevice"
    
               If ($pnpDeviceProperties.KeyName -contains "DEVPKEY_Device_Children") {
                   $pnpChildDeviceIds = ($pnpDeviceProperties | ? KeyName -eq DEVPKEY_Device_Children).Data
                   Lookup-Device-Children -ChildDeviceIds $pnpChildDeviceIds
               }
           }
       }
    
       # Get a list of the supported devices from the .rdp file and store them in an array
       [string]$usb = Get-Content -Path $rdpFile | Select-String USB
       $devices = @($usb.Replace("usbdevicestoredirect:s:","").Replace("-","").Split(";"))
    
       # Get the devices
       foreach ($device in $devices) {
           $pnpDeviceProperties = Get-PnpDeviceProperty -InstanceId $device
    
           [string]$parentDevice = ($pnpDeviceProperties | ? KeyName -eq DEVPKEY_NAME).Data
           Write-Output "`n-------------------`n`nParent device name: $parentDevice`nUSB device ID: $device`n"
    
           If ($pnpDeviceProperties.KeyName -contains "DEVPKEY_Device_Children") {
               $pnpChildDeviceIds = ($pnpDeviceProperties | ? KeyName -eq DEVPKEY_Device_Children).Data
               Write-Output "This parent device has the following child devices:"
               Lookup-Device-Children -ChildDeviceIds $pnpChildDeviceIds
           }
       }
    
    } else {
        Write-Output "Error: file doesn't exist. Please check the file path and try again."
    }
    

    输出与以下输出类似:

    -------------------
    
    Parent device name: USB Composite Device
    USB device ID: USB\VID_0ECB&PID_1F58\9&2E5F6FA0&0&1
    
    This parent device has the following child devices:
        AKG C44-USB Microphone
        Headphones (AKG C44-USB Microphone)
        Microphone (AKG C44-USB Microphone)
        USB Input Device
        HID-compliant consumer control device
        HID-compliant consumer control device
    
    -------------------
    
    Parent device name: USB Composite Device
    USB device ID: USB\VID_262A&PID_180A\6&22E6BE6&0&1
    
    This parent device has the following child devices:
        USB Input Device
        HID-compliant consumer control device
        Klipsch R-41PM
        Speakers (Klipsch R-41PM)
    
    -------------------
    
    Parent device name: USB-to-Serial Comm Port (COM30)
    USB device ID: USB\VID_012A&PID_0123\A&3A944CE5&0&2
    
    -------------------
    
    Parent device name: USB Composite Device
    USB device ID: USB\VID_046D&PID_0893\88A44075
    
    This parent device has the following child devices:
        Logitech StreamCam
        Logitech StreamCam
        Microphone (Logitech StreamCam)
        Logitech StreamCam WinUSB
        USB Input Device
        HID-compliant vendor-defined device
    
  1. 记下要用于重定向的任何父设备的设备实例 ID。 仅父设备实例 ID 适用于 USB 重定向。

可选:发现与设备设置类匹配的外设

对于 Azure 虚拟桌面,可以在主机池属性中输入设备类 GUID,以便仅重定向与该设备类匹配的设备。 检索与本地设备上特定设备类 GUID 匹配的设备的列表:

  1. 在本地设备上打开 PowerShell 提示符。

  2. 运行以下命令,将 <device class GUID> 替换为要搜索的设备类 GUID 并列出匹配的设备。 有关设备类 GUID 值的列表,请参阅为供应商提供的系统定义的设备安装程序类

    $deviceClassGuid = "<device class GUID>"
    Get-PnpDevice | Where-Object {$_.ClassGuid -like "*$deviceClassGuid*" -and $_.InstanceId -like "USB\*" -and $_.Present -like "True"} | FT -AutoSize
    

    例如,将设备类 GUID 4d36e96c-e325-11ce-bfc1-08002be10318 用于多媒体设备,输出类似于以下输出:

    Status Class FriendlyName              InstanceId
    ------ ----- ------------              ----------
    OK     MEDIA USB Advanced Audio Device USB\VID_0D8C&PID_0147&MI_00\B&35486F89&0&0000
    OK     MEDIA AKG C44-USB Microphone    USB\VID_0ECB&PID_1F58&MI_00\A&250837E1&0&0000
    OK     MEDIA Logitech StreamCam        USB\VID_046D&PID_0893&MI_02\6&4886529&0&0002
    OK     MEDIA Klipsch R-41PM            USB\VID_262A&PID_180A&MI_01\7&3598D0A0&0&0001
    

主机池配置

Azure 虚拟桌面主机池设置“USB 设备重定向”确定远程会话中支持连接到本地设备的 USB 设备。 相应的 RDP 属性为 usbdevicestoredirect:s:<value>。 有关详细信息,请参阅支持的 RDP 属性

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

  1. 登录到 Azure 门户

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

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

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

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

  5. 对于“USB 设备重定向”,请选择下拉列表,然后选择以下选项之一

    • 重定向还没有被另一个高级别重定向重定向的所有 USB 设备(默认)
    • 重定向属于指定安装程序类成员,或由特定实例 ID 定义的所有设备
  6. 如果选择“重定向属于指定安装程序类成员,或由特定实例 ID 定义的所有设备”,则会显示一个额外框。 需要输入要重定向的设备的设备设置类或特定设备实例路径,用分号分隔。 有关详细信息,请参阅控制不透明低级别 USB 重定向。 要获取受支持设备的值,请参阅可选:检索特定设备实例 ID;有关设备类 GUID,请参阅可选:发现与设备设置类匹配的外设。 对于 Azure 虚拟桌面,必须使用反斜杠字符对 \:; 字符进行转义。

    以下是一些示例:

    • 要重定向特定外设,而该外设仅当基于整个设备实例路径(即连接到特定 USB 端口)时才会重定向,请使用双反斜杠字符(如 USB\\VID_045E&PID_0779\\5&21F6DCD1&0&5)输入设备实例路径。 对于多个设备,请使用分号分隔它们,例如 USB\\VID_045E&PID_0779\\5&21F6DCD1&0&5;USB\\VID_0ECB&PID_1F58\\9&2E5F6FA0&0&1

    • 要重定向属于特定设备设置类(即所有受支持的多媒体设备)的成员的所有外设,请输入设备类 GUID,包括大括号。 例如,要重定向所有多媒体设备,请输入 {4d36e96c-e325-11ce-bfc1-08002be10318}。 对于多个设备类 ID,请使用分号分隔它们,例如 {4d36e96c-e325-11ce-bfc1-08002be10318};{6bdd1fc6-810f-11d0-bec7-08002be2092f}

    提示

    可通过组合设备实例路径和设备类 GUID 来创建高级别配置,并在“RDP 属性”的“高级别”选项卡上输入配置。 有关更多示例,请参阅 usbdevicestoredirect RDP 属性

  7. 选择“保存”。 现在可以测试 USB 重定向配置。

测试 USB 重定向

配置会话主机、主机池 RDP 属性和本地设备后,可测试 USB 重定向。 考虑以下行为:

配置云电脑和本地设备后,可测试 USB 重定向。 考虑以下行为:

配置开发箱和本地设备后,可测试 USB 重定向。 考虑以下行为:

  • 使用与本地设备相同的进程在远程会话中安装重定向 USB 外设的驱动程序。 确保在远程会话中启用了 Windows 更新,或者驱动程序可用于外设。

  • 不透明低级别 USB 重定向专为 LAN 连接而设计(< 20 毫秒延迟):延迟较高时,某些 USB 外设可能无法正常运行,或者用户体验可能不合适。

  • 当 USB 外设被重定向到远程会话时,它们在本地设备上不可用。

  • USB 外设一次只能在一个远程会话中使用。

  • USB 重定向仅在本地 Windows 设备中可用。

测试 USB 重定向:

  1. 插入要在远程会话中使用的受支持 USB 外设。

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

  3. 检查外设是否已连接到远程会话。 全屏显示后,在状态栏上选择图标以选择要使用的设备。 仅当正确配置 USB 重定向时,此图标才会显示。

    显示 Windows 应用的状态栏的屏幕截图,其中用红色框标出了所选择的要使用的设备图标。

  4. 选中希望重定向到远程会话的每个 USB 外设的框,然后取消选中不希望重定向的外设对应的框。 一旦定向,某些设备可能会在此列表中显示为“远程桌面通用 USB 设备”

    显示连接到远程会话时 Windows 应用的本地设备和资源对话框的屏幕截图。

  5. 检查设备在远程会话中是否正常运行。 需要在远程会话中安装正确的驱动程序。 以下是检查 USB 外设在远程会话中可用的一些方法,具体取决于你在远程会话中拥有的权限:

    1. 从“开始”菜单打开远程会话中的“设备管理器”,或者从命令行运行 devmgmt.msc。 检查已重定向外设显示在预期的设备类别中,并且未显示任何错误。

      显示远程会话中的设备管理器的屏幕截图。

    2. 在远程会话中打开 PowerShell 提示符并运行以下命令:

      Get-PnPDevice | Where-Object {$_.InstanceId -like "*TSUSB*" -and $_.Present -eq "true"} | FT -AutoSize
      

      输出与以下输出类似。 检查状态列是否有任何条目显示“错误”。 如果有任何条目有错误,请根据制造商的说明对设备进行故障排除。

      Status Class FriendlyName                   InstanceId
      ------ ----- ------------                   ----------
      OK     USB   USB Composite Device           USB\VID_0D8C&PID_0147&REV_0109\3&2DCEE32&0&TSUSB-SESSION4...
      OK     Ports USB-to-Serial Comm Port (COM6) USB\VID_012A&PID_0123&REV_0202\3&2DCEE32&0&TSUSB-SESSION4...
      
  6. 外设被重定向且正常运行后,你可像在本地设备上一样使用它们。

Usbdevicestoredirect RDP 属性

usbdevicestoredirect RDP 属性用于指定重定向到远程会话的 USB 设备,其语法 usbdevicestoredirect:s:<value> 在使用不透明低级别重定向方法重定向 USB 外设时提供了灵活性。 下表显示了属性的有效值。 值可以单独使用,也可以按照处理顺序组合使用这些值(用分号分隔)。 有关详细信息,请参阅控制不透明低级别 USB 重定向

处理顺序 说明
空值 未指定任何值 不要使用不透明低级重定向来重定向任何受支持的 USB 外设。
1 * 重定向未使用高级重定向的所有外设。
2 {<DeviceClassGUID>} 重定向属于指定的设备安装程序类成员的所有外设。 有关设备类 GUID 值的列表,请参阅为供应商提供的系统定义的设备安装程序类
3 <USBInstanceID> 重定向由给定设备实例路径指定的 USB 外设。
4 <-USBInstanceID> 不要重定向由给定设备实例路径指定的外设。

当按正确的处理顺序构造为字符串时,语法为:

usbdevicestoredirect:s:*;{<DeviceClassGUID>};<USBInstanceID>;<-USBInstanceID>`

下面是使用 usbdevicestoredirect RDP 属性的一些示例:

  • 要重定向高级别重定向不会重定向的所有受支持的 USB 外设,请使用:

    usbdevicestoredirect:s:*
    
  • 要重定向设备类 GUID 为 {6bdd1fc6-810f-11d0-bec7-08002be2092f}(映像)的所有受支持的 USB 外设,请使用:

    usbdevicestoredirect:s:{6bdd1fc6-810f-11d0-bec7-08002be2092f}
    
  • 要重定向高级别重定向不会重定向的所有受支持的 USB 外设,以及设备类 GUID 为 {6bdd1fc6-810f-11d0-bec7-08002be2092f}(映像)和 {4d36e96c-e325-11ce-bfc1-08002be10318}(多媒体)的 USB 外设,请使用:

    usbdevicestoredirect:s:*;{6bdd1fc6-810f-11d0-bec7-08002be2092f};{4d36e96c-e325-11ce-bfc1-08002be10318}
    
  • 要重定向实例 ID 为 USB\VID_095D&PID_9208\5&23639F31&0&2USB\VID_045E&PID_076F\5&14D1A39&0&7 的受支持的 USB 外设,请使用:

    usbdevicestoredirect:s:USB\VID_095D&PID_9208\5&23639F31&0&2;USB\VID_045E&PID_076F\5&14D1A39&0&7
    
  • 要重定向高级别重定向不会重定向的所有受支持的 USB 外设,但不重定向实例 ID 为 USB\VID_045E&PID_076F\5&14D1A39&0&7 的设备,请使用:

    usbdevicestoredirect:s:*;-USB\VID_045E&PID_076F\5&14D1A39&0&7
    
  • 使用以下语法实现以下方案:

    • 重定向高级别重定向不会重定向的所有受支持的 USB 外设。
    • 重定向设备设置类 GUID 为 {6bdd1fc6-810f-11d0-bec7-08002be2092f}(映像)的所有受支持的 USB 外设。
    • 重定向实例 ID 为 USB\VID_095D&PID_9208\5&23639F31&0&2 的受支持的 USB 外设。
    • 不重定向实例 ID 为 USB\VID_045E&PID_076F\5&14D1A39&0&7 的受支持的 USB 外设。
    usbdevicestoredirect:s:*;{6bdd1fc6-810f-11d0-bec7-08002be2092f};USB\VID_095D&PID_9208\5&23639F31&0&2;-USB\VID_045E&PID_076F\5&14D1A39&0&7
    

提示

对于 Azure 虚拟桌面,必须使用反斜杠字符对 \:; 字符进行转义。 这包括任何设备实例路径,例如 USB\\VID_045E&PID_0779\\5&21F6DCD1&0&5。 它不会影响重定向行为。