将卷序列号映射到物理磁盘驱动器

将卷序列号映射到物理磁盘驱动器

我的台式机中有几个完全相同的驱动器。我想替换其中一个包含单个卷的驱动器(并且它是用于创建卷的唯一磁盘)。问题是我不想逐个取出每个磁盘来查看移除的磁盘是否一。因此我想获取磁盘的序列号。

我能够获取所有磁盘的序列号wmic,并且能够获取卷的卷序列号。我该如何链接它们(最好同时使用 GUI 和控制台)?

答案1

当然可以将分区(以及驱动器号)映射到 WMI 中的设备(查询wmic)。但是,跟踪从一个 WMI 对象到另一个 WMI 对象的关联可能需要一些努力,查询语言:WMI 的“SQL Like”查询语言(请参阅文档链接)。

使用 PowerShell(因为我更了解它,并且它使执行表达式变得更容易):

PSH 还具有转录功能,因此可以进行一些编辑和注释:

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

[...]

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

[...]

一个例子Win32_LogicalDisk每个分区都存在:通常,这是与磁盘相关的任何内容的良好起点。但我想要更多详细信息,包括元数据,以便唯一地标识此实例,以便我可以查找关联。因此,使用Format-List(别名为fl)列出所有属性:

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
[...]

然后捕获__RELPATH__PATH也有效,但这里的一切都是本地的,我不需要计算机名称或 WMI 命名空间:我所做的一切都在root\cimv2)。

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

现在来谈谈巧妙之处:还有哪些对象与驱动器的对象相链接:

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"                  

这个看起来很有趣:

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
[...]

但本身并不包含我想要的内容。因此重复该过程:

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:"                 

因此它链接回Win32_LogicalDisk我们开始的地方,但在这种情况下Win32_DiskDrive看起来它可能会有所帮助(的值__RELPATH是一个线索:我知道这是 Windows 对其物理磁盘使用的命名类型):

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____\5&2CC8A95A&0&2.0.0
[...]
SerialNumber                : 2020202020202020202020205639325333323235
Signature                   : 
[...]

就这样了。(我怀疑SerialNumber的值是经过编码的20——可能是十六进制空格的 ASCII 码,但检查这一点需要打开我的电脑并取出磁盘驱动器:我把它留作练习 :-))。

相关内容