Mapeie o número de série do volume para a unidade de disco físico

2

Eu tenho exatamente as mesmas unidades na minha máquina desktop. Eu quero substituir uma das unidades que contém volume único (e é o único disco que é usado para criar o volume). O problema é que eu não quero tirar todos os discos um por um para ver se o que foi removido é o o . Portanto, eu quero obter o número de série do disco.

Consigo obter números de série de todos os discos com wmic e consigo obter o Volume Serial Number do volume. Como posso ligá-los (de preferência ambos usando GUI e console)?

    
por matt 24.02.2014 / 10:00

1 resposta

3

É certamente possível mapear partições (e, portanto, direcionar letras) para os dispositivos no WMI (que wmic consultas). No entanto, pode exigir um pouco de esforço seguir as associações de um objeto WMI para outros com WQL : a linguagem de consulta "SQL Like" do WMI (ver link para a documentação).

Usando o PowerShell (porque eu o conheço melhor e facilita muito a execução de expressões):

O PSH também tem uma capacidade de transcrição, portanto, com algumas edições e anotações:

PS [64] E:\ #35> gwmi WIN32_LogicalDisk

[...]

DeviceID     : F:
DriveType    : 3
ProviderName : 
FreeSpace    : 1660612608
Size         : 2147479552
VolumeName   : Messages

[...]

Uma instância de Win32_LogicalDisk existe por partição : geralmente é um bom ponto de partida para qualquer coisa relacionada a discos. Mas quero mais detalhes, incluindo os meta-dados para identificar exclusivamente essa instância, para que eu possa procurar associações. Portanto, use Format-List (com alias para fl ) para listar todas as propriedades:

PS [64] E:\ #37> gwmi -query 'select * from WIN32_LogicalDisk where DeviceId="F:"' | fl *


PSComputerName               : MyComputer
Status                       : 
Availability                 : 
DeviceID                     : F:
StatusInfo                   : 
__GENUS                      : 2
__CLASS                      : Win32_LogicalDisk
__SUPERCLASS                 : CIM_LogicalDisk
__DYNASTY                    : CIM_ManagedSystemElement
__RELPATH                    : Win32_LogicalDisk.DeviceID="F:"
__PROPERTY_COUNT             : 40
__DERIVATION                 : {CIM_LogicalDisk, CIM_StorageExtent, CIM_LogicalDevice, CIM_LogicalElement...}
__SERVER                     : MyComputer
__NAMESPACE                  : root\cimv2
__PATH                       : \MyComputer\root\cimv2:Win32_LogicalDisk.DeviceID="F:"
[...]
Caption                      : F:
Compressed                   : False
[...]
Description                  : Local Fixed Disk
DriveType                    : 3
[...]
FileSystem                   : NTFS
FreeSpace                    : 1660612608
[...]
MediaType                    : 12
Name                         : F:
[...]
VolumeName                   : Messages
VolumeSerialNumber           : 5A5189FB
[...]

E, em seguida, para capturar o __RELPATH ( __PATH também funciona, mas tudo é local aqui, não preciso do nome do computador nem do namespace WMI: tudo que estou fazendo é em root\cimv2 ). / p>

PS [64] E:\ #38> $DriveFPath = (gwmi -query 'select * from WIN32_LogicalDisk where DeviceId="F:"').__RELPATH

Agora, o bit inteligente: que outros objetos estão vinculados ao objeto da unidade:

PS [64] E:\ #39> gwmi -query "associators of {$DriveFPath}" | ft -auto __CLASS,__RELPATH

__CLASS              __RELPATH                                           
-------              ---------                                           
Win32_DiskPartition  Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
Win32_Directory      Win32_Directory.Name="f:\"                         
Win32_ComputerSystem Win32_ComputerSystem.Name="MyComputer"                  

Este parece interessante:

PS [64] E:\ #42> gwmi -query "associators of {$DriveFPath} where resultclass=Win32_diskpartition" | fl *

[...]
Name                        : Disk #0, Partition #0
__GENUS                     : 2
__CLASS                     : Win32_DiskPartition
__SUPERCLASS                : CIM_DiskPartition
__DYNASTY                   : CIM_ManagedSystemElement
__RELPATH                   : Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
__PROPERTY_COUNT            : 34
__DERIVATION                : {CIM_DiskPartition, CIM_StorageExtent, CIM_LogicalDevice, CIM_LogicalElement...}
__SERVER                    : MyComputer
__NAMESPACE                 : root\cimv2
__PATH                      : \MyComputer\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
[...]
Caption                     : Disk #0, Partition #0
[...]
Description                 : GPT: Basic Data
DeviceID                    : Disk #0, Partition #0
[...]

Mas não contém o que eu quero. Então repita o processo:

PS [64] E:\ #43> $DiskPartitionPath = (gwmi -query "associators of {$DriveFPath} where resultclass=Win32_diskpartition").__RELPATH

PS [64] E:\ #47> gwmi -query "associators of {$DiskPartitionPath}" | ft -auto __CLASS,__RELPATH

__CLASS              __RELPATH                                       
-------              ---------                                       
Win32_ComputerSystem Win32_ComputerSystem.Name="MyComputer"              
Win32_DiskDrive      Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE0"
Win32_LogicalDisk    Win32_LogicalDisk.DeviceID="F:"                 

Por isso, vincula-se de volta ao Win32_LogicalDisk onde começamos, mas, neste caso, Win32_DiskDrive parece ser útil (o valor do __RELPATH é uma pista: sei que esse é o tipo de nomeação do Windows usa para seus discos físicos):

PS [64] E:\ #48> gwmi -query "associators of {$DiskPartitionPath} where resultclass=Win32_DiskDrive" | fl *


[...]
DeviceID                    : \.\PHYSICALDRIVE0
StatusInfo                  : 
Partitions                  : 2
BytesPerSector              : 512
ConfigManagerUserConfig     : False
DefaultBlockSize            : 
Index                       : 0
InstallDate                 : 
InterfaceType               : IDE
[...]
SectorsPerTrack             : 63
Size                        : 1500299297280
TotalCylinders              : 182401
TotalHeads                  : 255
TotalSectors                : 2930272065
TotalTracks                 : 46512255
TracksPerCylinder           : 255
__GENUS                     : 2
__CLASS                     : Win32_DiskDrive
__SUPERCLASS                : CIM_DiskDrive
__DYNASTY                   : CIM_ManagedSystemElement
__RELPATH                   : Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE0"
__PROPERTY_COUNT            : 51
__DERIVATION                : {CIM_DiskDrive, CIM_MediaAccessDevice, CIM_LogicalDevice, CIM_LogicalElement...}
__SERVER                    : MyComputer
__NAMESPACE                 : root\cimv2
__PATH                      : \MyComputer\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE0"
Availability                : 
Capabilities                : {3, 4}
CapabilityDescriptions      : {Random Access, Supports Writing}
Caption                     : ST31500341AS ATA Device
CompressionMethod           : 
CreationClassName           : Win32_DiskDrive
Description                 : Disk drive
[...]
Model                       : ST31500341AS ATA Device
Name                        : \.\PHYSICALDRIVE0
PNPDeviceID                 : IDE\DISKST31500341AS____________________________CC1H____&2CC8A95A&0&2.0.0
[...]
SerialNumber                : 2020202020202020202020205639325333323235
Signature                   : 
[...]

E aí está você. (Eu suspeito que o valor de SerialNumber esteja codificado - 20 poderia ser o código ASCII para um espaço em hexadecimal, mas verificando que precisaria abrir meu computador e tirar a unidade de disco: deixarei isso como um exercício: -)).

    
por 24.02.2014 / 10:35