Конечно, можно сопоставить разделы (и, следовательно, буквы дисков) с устройствами в WMI (которые запрашивает wmic
). Однако может потребоваться небольшое усилие для отслеживания связей одного объекта WMI с другим с помощью WQL: языка запросов SQL Like WMI (см. Ссылку для документации).
Использование 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
«s значения encoded- 20
может быть ASCII - кодом для пространства в шестнадцатеричном, но убедившись , что потребуется открытие моего компьютера и получить диск изгонять: Я оставлю это упражнение :-)).