![将卷序列号映射到物理磁盘驱动器](https://linux22.com/image/1399008/%E5%B0%86%E5%8D%B7%E5%BA%8F%E5%88%97%E5%8F%B7%E6%98%A0%E5%B0%84%E5%88%B0%E7%89%A9%E7%90%86%E7%A3%81%E7%9B%98%E9%A9%B1%E5%8A%A8%E5%99%A8.png)
我的台式机中有几个完全相同的驱动器。我想替换其中一个包含单个卷的驱动器(并且它是用于创建卷的唯一磁盘)。问题是我不想逐个取出每个磁盘来查看移除的磁盘是否这一。因此我想获取磁盘的序列号。
我能够获取所有磁盘的序列号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 码,但检查这一点需要打开我的电脑并取出磁盘驱动器:我把它留作练习 :-))。