有没有办法在 Windows(Powershell)中唯一地标识 USB 存储设备?

有没有办法在 Windows(Powershell)中唯一地标识 USB 存储设备?

讨论了 PowerShell 中 USB 卷的唯一 ID。这似乎存在一个明显的问题。卷是由操作系统创建的,因此如果脚本在另一个系统上运行,则无法保证不会发生冲突。似乎保证不会发生冲突的唯一方法是使用 Win32_DiskDrive 或 Get_Disk 的某个关联器将物理介质连接到卷。有人有这个吗?或者,我是否遗漏了存储介质或逻辑卷的一些唯一 ID?

答案1

我缺少了存储介质或逻辑卷的某些唯一 ID 吗?

看来,保证不发生冲突的唯一方法是使用 Win32_DiskDrive 或 Get_Disk 的某些关联器将物理介质连接到卷

答案Powershell 中 USB 驱动器的唯一标识符经过视窗建议使用 SerialNumber:

Get-WmiObject -Class Win32_Volume | 选择名称、DeviceID、SerialNumber

然而,一些制造商:

  • 根本不提供序列号,或者

  • 在许多设备中使用相同的序列号。


解决方案:将 SerialNumber 与物理介质和卷一起使用

我们可以将设备 ID、型号、分区数据、卷 ID 和序列号结合在一起,如以下 PowerShell 脚本所示(基于使用 WMI 通过 PowerShell 将磁盘卷链接到物理磁盘)。

这允许为物理磁盘生成唯一的 ID。

获取磁盘详细信息.ps1

$diskdrive = Get-WmiObject win32_diskdrive
foreach($drive in $diskdrive)
  {
  out-host -InputObject "`nDevice: $($drive.deviceid.substring(4))`n  Model: $($drive.model)"
  # partition
  $partitions = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($drive.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
  foreach($part in $partitions)
    {
    Out-Host -InputObject "  Partition: $($part.name)"
    $vols = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($part.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"
    foreach($vol in $vols)
      {
      out-host -InputObject "  Volume: $($vol.name)"
      $serial = Get-WmiObject -Class Win32_Volume | where { $_.Name -eq "$($vol.name)\" } | select SerialNumber
      out-host -InputObject "  Serial Number: $($serial.serialnumber)"
      }
    }
  }

示例输出

> .\Get-DiskDetails.ps1

Device: PHYSICALDRIVE0
  Model: WDC WD5000LPVX-08V0TT5
  Partition: Disk #0, Partition #0
  Partition: Disk #0, Partition #1
  Partition: Disk #0, Partition #2
  Volume: C:
  Serial Number: 3369131806

Device: PHYSICALDRIVE1
  Model: SanDisk Cruzer USB Device
  Partition: Disk #1, Partition #0
  Volume: E:
  Serial Number: 2157441447

Device: PHYSICALDRIVE2
  Model: Seagate Expansion Desk USB Device
  Partition: Disk #2, Partition #0
  Volume: F:
  Serial Number: 911653731
>

相关内容