You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell获取USB集线器插槽对应的驱动器盘符分配?

实现USB集线器物理插槽与驱动器盘符的对应映射

问题背景

Windows会自动为USB设备分配驱动器盘符,需要明确4口USB集线器每个物理插槽对应的设备(盘符/序列号)。设备管理器中「USB大容量存储设备」下的条目以Port_#000x.Hub_#000y格式固定对应物理插槽,但现有命令无法直接关联插槽与盘符:

  • 使用Get-WmiObject Win32_diskdrive | Where-Object {$_.interfacetype -eq "USB"}获取的物理设备ID(如\.\PHYSICALDRIVE1)与实际插槽无固定对应关系
  • Win32_diskdrive返回的设备ID与Get-CimInstance win32_PnPSignedDriver | where description -like 'USB Mass Storage Device'的设备ID无法直接关联

目标输出为物理插槽与盘符的对应表:

Slot                  Drive
------------------    -----
1                     D:
2                     G:
3                     F:
4                     E:

解决方案

通过串联多个WMI/CIM类的关联关系,可实现插槽到盘符的映射,步骤如下:

1. 关联USB集线器端口与大容量存储设备

先定位目标USB集线器,再获取每个端口对应的存储设备实例:

# 获取目标USB集线器(可通过Description筛选,比如"4-Port USB Hub")
$targetHub = Get-CimInstance Win32_USBHub | Where-Object { $_.Description -match "4-Port USB Hub" }

# 获取集线器下所有USB大容量存储设备及其端口信息
$usbStorageDevices = Get-CimInstance Win32_PnPEntity | 
    Where-Object { $_.Description -eq "USB Mass Storage Device" -and $_.PNPDeviceID -match $targetHub.DeviceID } |
    Select-Object PNPDeviceID, @{Name='PortNumber'; Expression={[int]($_.PNPDeviceID -split 'Port_#000')[1].Substring(0,1)}}

2. 关联存储设备到物理磁盘

通过Win32_USBControllerDevice关联类,把PNP设备ID映射到物理磁盘:

# 构建PNP设备到物理磁盘的映射
$pnpToDisk = @{}
Get-CimInstance Win32_USBControllerDevice | ForEach-Object {
    $pnpDevice = Get-CimInstance -InputObject $_.Dependent
    if ($pnpDevice.Description -eq "USB Mass Storage Device") {
        $diskDrive = Get-CimInstance Win32_DiskDrive | Where-Object { $_.PNPDeviceID -eq $pnpDevice.PNPDeviceID }
        if ($diskDrive) {
            $pnpToDisk[$pnpDevice.PNPDeviceID] = $diskDrive.DeviceID
        }
    }
}

3. 关联物理磁盘到逻辑盘符

通过Win32_LogicalDiskToPartition关联类,把物理磁盘ID映射到逻辑盘符:

# 构建物理磁盘到盘符的映射
$diskToDrive = @{}
Get-CimInstance Win32_LogicalDiskToPartition | ForEach-Object {
    $partition = Get-CimInstance -InputObject $_.Antecedent
    $diskId = $partition.DeviceID -split 'Disk #(\d+)' | Select-Object -Index 1
    $diskDeviceID = "\\.\PHYSICALDRIVE$diskId"
    $drive = Get-CimInstance -InputObject $_.Dependent
    $diskToDrive[$diskDeviceID] = $drive.DeviceID
}

4. 生成最终对应表

整合以上映射,输出插槽与盘符的对应关系:

# 合并数据生成结果
$result = $usbStorageDevices | ForEach-Object {
    $diskId = $pnpToDisk[$_.PNPDeviceID]
    $driveLetter = $diskToDrive[$diskId]
    [PSCustomObject]@{
        Slot = $_.PortNumber
        Drive = $driveLetter ? $driveLetter : "Unused"
    }
} | Sort-Object Slot

# 格式化输出
$result | Format-Table -AutoSize Slot, Drive

补充说明

  • 若目标集线器的描述不是"4-Port USB Hub",需修改第一步的筛选条件,可通过Get-CimInstance Win32_USBHub查看所有集线器的描述
  • 对于未挂载设备的插槽,会显示"Unused"
  • 脚本兼容PowerShell 5.1及以上版本

内容的提问来源于stack exchange,提问作者Lando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:31