2

У меня есть несколько точно таких же дисков на моем настольном компьютере. Я хочу заменить один из дисков, который содержит один том (и это единственный диск, который используется для создания тома). Проблема в том, что я не хочу вынимать каждый диск один за другим, чтобы проверить, удален ли один. Поэтому я хочу получить серийный номер диска.

Я могу получить серийные номера всех дисков с помощью wmic и я могу получить серийный номер тома тома. Как я могу связать их (желательно с использованием графического интерфейса и консоли)?

1 ответ1

3

Конечно, можно сопоставить разделы (и, следовательно, буквы дисков) с устройствами в 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 - кодом для пространства в шестнадцатеричном, но убедившись , что потребуется открытие моего компьютера и получить диск изгонять: Я оставлю это упражнение :-)).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .