web-dev-qa-db-ja.com

Windows(Powershell)でUSBストレージデバイスを一意に識別する方法はありますか?

This PowerShellのUSBボリュームの一意のIDと称するものについて説明します。明らかな問題があるようです。ボリュームはOSによって作成されるため、スクリプトが別のシステムで実行された場合に衝突を保証する方法はありません。衝突を保証する唯一の方法は、Get_DiskのWin32_DiskDriveのいずれかのアソシエーターを使用して、物理メディアをボリュームに接続することであるようです。誰かこれはありますか?または、不足しているストレージメディアまたは論理ボリュームの一意のIDはありますか?

1
jamesson

不足しているストレージメディアまたは論理ボリュームの一意のIDはありますか?

衝突を保証する唯一の方法は、Get_DiskのWin32_DiskDriveのいずれかのアソシエーターを使用して、物理メディアをボリュームに接続することです。

答え PowershellのUSBドライブの一意の識別子 by Windos は、シリアル番号の使用を提案しています。

Get-WmiObject -Class Win32_Volume |名前、デバイスID、シリアル番号を選択します

ただし、一部のメーカー:

  • シリアル番号をまったく提供しない、または

  • 多くのデバイスで同じシリアル番号を使用してください。


解決策:SerialNumberを物理メディアおよびボリュームと一緒に使用する

次のPowerShellスクリプトで示されているように、デバイスID、モデル、パーティションデータ、ボリュームID、およびシリアル番号を結び付けることができます( WMIを使用してPowerShellでディスクボリュームを物理ディスクにリンクする ) 。

これにより、物理ディスクの一意のIDを生成できます。

Get-DiskDetails.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
>
1
DavidPostill