1 votes

Existe-t-il un moyen d'identifier de manière unique les périphériques de stockage USB dans Windows (Powershell) ?

Ce site parle de ce qui est censé être un identifiant unique pour les volumes USB dans PowerShell. Il semble y avoir un problème évident. Les volumes sont créés par l'OS, il n'y a donc aucun moyen de garantir contre une collision si le script est exécuté sur un autre système. Il semble que la seule façon de garantir contre les collisions soit d'utiliser un associateur de Win32_DiskDrive ou Get_Disk pour connecter les supports physiques aux volumes. Quelqu'un l'a-t-il fait ? Sinon, existe-t-il un identifiant unique pour les supports de stockage ou les volumes logiques qui m'échappe ?

1voto

DavidPostill Points 140654

Y a-t-il un identifiant unique pour le support de stockage ou le volume logique qui m'échappe ?

Il semble que la seule façon d'éviter les collisions soit d'utiliser un associateur de Win32_DiskDrive ou Get_Disk pour connecter les supports physiques aux volumes.

La réponse Identifiant unique pour la clé USB dans Powershell par Windos suggère d'utiliser le SerialNumber :

Get-WmiObject -Class Win32_Volume | select Name, DeviceID, SerialNumber

Cependant, certains fabricants :

  • Ne pas fournir de numéro de série du tout, ou

  • Utilisez le même numéro de série dans plusieurs appareils.


Solution : Utilisez SerialNumber avec Physical Media et Volume.

Nous pouvons relier l'ID du dispositif, le modèle, les données de partition, l'ID du volume et le numéro de série comme le montre le script PowerShell suivant (basé sur Utilisation de WMI pour relier un volume de disque à un disque physique avec PowerShell ).

Cela permet de générer un identifiant unique pour un disque physique.

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)"
      }
    }
  }

Exemple de sortie :

> .\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
>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X