Класс Win32_DiskDrive позволяет получить информацию о жестком диске, точнее о его технических параметрах (количество секторов, головок, дополнительные функции и так далее). В состав класса входят 49 свойств, которые доступны только для чтения и 2 метода, которые не имеют реализации. Win32_DiskDrive происходит от класса CIM_DiskDrive, который является производным от CIM_MediaAccessDevice. Класс CIM_MediaAccessDevice происходит от CIM_LogicalDevice.
Класс находится в пространстве имен CIMV2, MOF файл — Cimwin32.mof, динамическая библиотека Cimwin32.dll, провайдер Win32. Если открыть утилиту WMI CIM Studio, выбрать в левой панели наш класс, а в правой панели перейти на вкладку Associations, то можно просмотреть ассоциативные связи с классами Win32_DiskPartition и Win32_PhysicalMedia.
Аналогично, для просмотра ассоциативных связей можно в командной строке выполнить следующую команду:
wmic CLASS Win32_DiskDrive ASSOC |
Так как вывод происходит в htm формате, то можно просто перенаправить его во внешний файл:
wmic CLASS Win32_DiskDrive ASSOC>"путь к файлу" |
В принципе, в той же командной строке можно получить описание самого класса (точнее, список всех его свойств и методов):
wmic CLASS Win32_DiskDrive |
Ниже я привел описание некоторых свойств для класса Win32_DiskDrive, которые позволяют получить информацию о жестком диске. В круглых скобках содержится имя класса, от которого свойство унаследовано.
Свойства Win32_DiskDrive
BytesPerSector— Количество байт в каждом секторе для заданного диска.
Capabilities– Свойство содержит информацию о дополнительных технических характеристиках в виде числовых значений, хранящихся в виде массива, (CIM_MediaAccessDevice). Примеры значений:
- 0 — неизвестно
- 1 — другое
- 2 — последовательный доступ
- 3 — случайный доступ
- 4 — поддержка записи
- 5 — шифрование
- 6 — сжатие
- 7 — поддержка съемных носителей
- 8 — ручная очистка
- 9 — автоматическая очистка
- 10 — SMART уведомление
- 11 — Поддержка Dual-Sided носителя
- 12 — Ejection Prior to Drive Dismount Not Required — это оставим как есть
CapabilityDescriptions – Массив строк, в которых хранится описание характеристик, указанных в свойстве Capabilities, (CIM_MediaAccessDevice)
Caption — Краткое описание объекта, (CIM_ManagedSystemElement).
CompressionMethod— Алгоритм или инструмент, используемый в устройстве для поддержки сжатия, информация о жестком диске, (CIM_MediaAccessDevice). Возвращает строки:
- Unknown — Неизвестно, поддерживает устройство возможность сжатия или нет.
- Compressed — Устройство поддерживает возможность сжатия данных, но его схема сжатия не известно или не разглашается.
- Not Compressed — Устройство не поддерживает сжатие.
ConfigManagerUserConfig– Возвращает логическое значение (TRUE или FALSE). Если значение TRUE, то данное устройство использует конфигурацию, определенную пользователем, (CIM_LogicalDevice).
CreationClassName – Имя класса-создателя, (CIM_LogicalDevice).
DefaultBlockSize — Размер по умолчанию блока в байтах, (CIM_MediaAccessDevice).
Description — Описание объекта, (CIM_ManagedSystemElement).
DeviceID— Уникальный идентификатор устройства, это свойство является ключевым, (CIM_LogicalDevice).
Index– Физический номер диска
InterfaceType– Собственно, тип интерфейса. Возможные значения:
- SCSI
- HDC
- IDE
- USB
- 1394
Manufacturer— Наименование изготовителя диска. Например: «Seagate»
MaxBlockSize— Максимальный размер блока в байтах, (CIM_MediaAccessDevice).
MaxMediaSize— Максимальный размер носителя в килобайтах, (CIM_MediaAccessDevice).
MediaType– Тип носителей используемых данным устройством. Возможные значения:
- External hard disk media
- Removable media other than floppy
- Fixed hard disk media
- Format is unknown
- Removable media
- Fixed hard disk
- Unknown
MinBlockSize — Минимальный размер блока в байтах, (CIM_MediaAccessDevice).
Model— Номер модели производителя.
Name— Метка, определяющая объект (устройство), (CIM_ManagedSystemElement).
NeedsCleaning– Если свойство возвращает значение True, значит устройство нуждается в очистке. Поддерживаемый тип очистки указывается в свойстве Capabilities, информация о жестком диске, (CIM_MediaAccessDevice).
NumberOfMediaSupported— Максимальное количество носителей, которые могут поддерживаться или подключаться (при условии, что устройство поддерживает несколько индивидуальных носителей), (CIM_MediaAccessDevice).
Partitions— Количество разделов на текущем диске, которые распознаются операционной системой.
PowerManagementCapabilities– Свойство содержит массив, хранящий информацию о специфических элементах питания устройства, (CIM_LogicalDevice).
Возможные значения:
- (0x0) — Неизвестно
- (0x1) — Не поддерживается
- (0x2) — Отключено
- (0x3) — Включено. Функции управления питанием в настоящее время включена, но точный набор функций неизвестен или информация недоступна.
- (0x4) — Энергосберегающий режим активируется автоматически. Устройство может изменять свое состояние питания на основе использования или по другим критериям.
- (0x5) — Состояние питания можно настраивать. Поддерживается метод SetPowerState, который находится в родительском классе CIM_LogicalDevice и может быть реализован.
- (0x6) — Поддержка полных циклов включения-выключения диска. Метод SetPowerState можно вызвать с установленным значением 5 (Power Cycle) параметра PowerState.
- (0x7) — Поддерживается временное включение питания. Метод SetPowerState можно вызвать с установленным значением 5 (Power Cycle) параметра PowerState и установкой заданной даты и времени, или интервала, для включения питания. Получение информации о жестких дисках.
PowerManagementSupported– Свойство содержит логические значения. Если TRUE, то устройство поддерживает управление питанием (например, можно поставить в режим ожидания). Само свойство не означает, что функции управления питанием в настоящее время включены, только то, что логическое устройство поддерживает управление питанием, (CIM_LogicalDevice).
SCSIBus– Номер SCSI шины
SCSILogicalUnit— SCSI логический номер устройства (LUN)
SCSIPort— SCSI номер порта
SCSITargetId— SCSI идентификатор
SectorsPerTrack— Количество секторов в каждой дорожке для даного физического диска.
SerialNumber– Серийный номер устройства (например, WD-WM3493798728), определенный производителем. Фактически, из всего списка (бесполезных) свойств, данное самое важное, но….. оно не поддерживается в Windows Server 2003 и Windows XP.
Signature— Идентификация диска. Это свойство может быть использовано для определения общего ресурса. Оно было добавлено для Windows XP.
Size— Размер диска. Он рассчитывается путем умножения общего количества цилиндров, дорожек в каждом цилиндре, секторов в каждой дорожке, и байт в каждом секторе.
Status — Текущий статус объекта, (CIM_ManagedSystemElement).
Возможные значения:
- «OK»
- «Error»
- «Degraded»
- «Unknown»
- «Pred Fail»
- «Starting»
- «Stopping»
- «Service»
- «Stressed»
- «NonRecover»
- «No Contact»
- «Lost Comm»
SystemName— Название компьютера, (CIM_LogicalDevice).
TotalCylinders– Свойство содержит общее количество цилиндров на диске, используется 13 h прерывание BIOS.
TotalHeads– Общее количество головок на диске, используется 13 h прерывание BIOS.
TotalSectors– Общее количество секторов на диске, используется 13 h прерывание BIOS.
TotalTracks– Общее количество дорожек на диске, используется 13 h прерывание BIOS
TracksPerCylinder– Количество дорожек в каждом цилиндре, используется 13 h прерывание BIOS.
Ниже, как всегда, я приведу два сценария на языках vbscript (Win32_DiskDrive.vbs) и jscript (Win32_DiskDrive.js), они по сути просто записывают в переменную значения свойств и потом выводят эту информацию о жестком диске и все.
'************************************************************** ' Информация о жестком диске ' Win32_DiskDrive.vbs '************************************************************** Option Explicit Dim strComputer, objWMIService, colItems, MouseInfo, DiskInfo, objItem, i strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive",,48) DiskInfo = "Информация о жестком диске" & vbCrlf & vbCrlf ' Перебираем коллекцию For Each objItem in colItems DiskInfo = DiskInfo & "Availability: " & objItem.Availability & vbCrLf DiskInfo = DiskInfo & "BytesPerSector: " & objItem.BytesPerSector & vbCrLf ' Проверяем, существует ли массив If NOT isNull(objItem.Capabilities) Then ' Начинаем обработку массива For i = Lbound(objItem.Capabilities) to Ubound(objItem.Capabilities) 'DiskInfo = DiskInfo & "Capabilities: " & objItem.Capabilities(i) & vbCrLf Select Case objItem.Capabilities(i) Case 0 DiskInfo = DiskInfo & "Capabilities: " & "неизвестно" & vbCrLf Case 1 DiskInfo = DiskInfo & "Capabilities: " & "другое" & vbCrLf Case 2 DiskInfo = DiskInfo & "Capabilities: " & "последовательный доступ" & vbCrLf Case 3 DiskInfo = DiskInfo & "Capabilities: " & "случайный доступ" & vbCrLf Case 4 DiskInfo = DiskInfo & "Capabilities: " & "поддержка записи" & vbCrLf Case 5 DiskInfo = DiskInfo & "Capabilities: " & "шифрование" & vbCrLf Case 6 DiskInfo = DiskInfo & "Capabilities: " & "сжатие" & vbCrLf Case 7 DiskInfo = DiskInfo & "Capabilities: " & "поддержка съемных носителей" & vbCrLf Case 8 DiskInfo = DiskInfo & "Capabilities: " & "ручная очистка" & vbCrLf Case 9 DiskInfo = DiskInfo & "Capabilities: " & "автоматическая очистка" & vbCrLf Case 10 DiskInfo = DiskInfo & "Capabilities: " & "SMART уведомление" & vbCrLf Case 11 DiskInfo = DiskInfo & "Capabilities: " & "Поддержка Dual-Sided носителя" & vbCrLf Case Else DiskInfo = DiskInfo & "Capabilities: " & "Ejection Prior to Drive Dismount Not Required" & vbCrLf End Select Next End If ' Проверяем, существует ли массив If NOT isNull(objItem.CapabilityDescriptions) Then DiskInfo = DiskInfo & "CapabilityDescriptions: " & Join(objItem.CapabilityDescriptions, ",") & vbCrLf End If DiskInfo = DiskInfo & "Caption: " & objItem.Caption & vbCrLf DiskInfo = DiskInfo & "CompressionMethod: " & objItem.CompressionMethod & vbCrLf DiskInfo = DiskInfo & "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode & vbCrLf DiskInfo = DiskInfo & "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig & vbCrLf DiskInfo = DiskInfo & "CreationClassName: " & objItem.CreationClassName & vbCrLf DiskInfo = DiskInfo & "DefaultBlockSize: " & objItem.DefaultBlockSize & vbCrLf DiskInfo = DiskInfo & "Description: " & objItem.Description & vbCrLf DiskInfo = DiskInfo & "DeviceID: " & objItem.DeviceID & vbCrLf DiskInfo = DiskInfo & "ErrorCleared: " & objItem.ErrorCleared & vbCrLf DiskInfo = DiskInfo & "ErrorDescription: " & objItem.ErrorDescription & vbCrLf DiskInfo = DiskInfo & "ErrorMethodology: " & objItem.ErrorMethodology & vbCrLf DiskInfo = DiskInfo & "Index: " & objItem.Index & vbCrLf DiskInfo = DiskInfo & "InstallDate: " & objItem.InstallDate & vbCrLf DiskInfo = DiskInfo & "InterfaceType: " & objItem.InterfaceType & vbCrLf DiskInfo = DiskInfo & "LastErrorCode: " & objItem.LastErrorCode & vbCrLf DiskInfo = DiskInfo & "Manufacturer: " & objItem.Manufacturer & vbCrLf DiskInfo = DiskInfo & "MaxBlockSize: " & objItem.MaxBlockSize & vbCrLf DiskInfo = DiskInfo & "MaxMediaSize: " & objItem.MaxMediaSize & vbCrLf DiskInfo = DiskInfo & "MediaLoaded: " & objItem.MediaLoaded & vbCrLf DiskInfo = DiskInfo & "MediaType: " & objItem.MediaType & vbCrLf DiskInfo = DiskInfo & "MinBlockSize: " & objItem.MinBlockSize & vbCrLf DiskInfo = DiskInfo & "Model: " & objItem.Model & vbCrLf DiskInfo = DiskInfo & "Name: " & objItem.Name & vbCrLf DiskInfo = DiskInfo & "NeedsCleaning: " & objItem.NeedsCleaning & vbCrLf DiskInfo = DiskInfo & "NumberOfMediaSupported: " & objItem.NumberOfMediaSupported & vbCrLf DiskInfo = DiskInfo & "Partitions: " & objItem.Partitions & vbCrLf DiskInfo = DiskInfo & "PNPDeviceID: " & objItem.PNPDeviceID & vbCrLf ' Проверяем, существует ли массив if NOT isNull(objItem.PowerManagementCapabilities) Then DiskInfo = DiskInfo & "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",") & vbCrLf End If DiskInfo = DiskInfo & "PowerManagementSupported: " & objItem.PowerManagementSupported & vbCrLf DiskInfo = DiskInfo & "SCSIBus: " & objItem.SCSIBus & vbCrLf DiskInfo = DiskInfo & "SCSILogicalUnit: " & objItem.SCSILogicalUnit & vbCrLf DiskInfo = DiskInfo & "SCSIPort: " & objItem.SCSIPort & vbCrLf DiskInfo = DiskInfo & "SCSITargetId: " & objItem.SCSITargetId & vbCrLf DiskInfo = DiskInfo & "SectorsPerTrack: " & objItem.SectorsPerTrack & vbCrlf 'DiskInfo = DiskInfo & "SerialNumber: " & objItem.SerialNumber & vbCrLf ' недоступно в XP DiskInfo = DiskInfo & "Signature: " & objItem.Signature & vbCrLf DiskInfo = DiskInfo & "Size: " & objItem.Size & vbCrLf DiskInfo = DiskInfo & "Status: " & objItem.Status & vbCrLf DiskInfo = DiskInfo & "StatusInfo: " & objItem.StatusInfo & vbCrLf DiskInfo = DiskInfo & "SystemCreationClassName: " & objItem.SystemCreationClassName & vbCrLf DiskInfo = DiskInfo & "SystemName: " & objItem.SystemName & vbCrLf DiskInfo = DiskInfo & "TotalCylinders: " & objItem.TotalCylinders & vbCrLf DiskInfo = DiskInfo & "TotalHeads: " & objItem.TotalHeads & vbCrLf DiskInfo = DiskInfo & "TotalSectors: " & objItem.TotalSectors & vbCrLf DiskInfo = DiskInfo & "TotalTracks: " & objItem.TotalTracks & vbCrLf DiskInfo = DiskInfo & "TracksPerCylinder: " & objItem.TracksPerCylinder & vbCrLf & vbCrLf Next ' выводим данные WScript.Echo DiskInfo |
//************************************************************** // Информация о жестком диске // Win32_DiskDrive.js //************************************************************** var strComputer, objWMIService, colItems, MouseInfo, DiskInfo, objItem, i var wbR = 0x10, wbF = 0x20; strComputer = "." objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\cimv2") colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbR | wbF); DiskInfo = "Информация о жестком диске\n\n"; // Перебираем коллекцию enumItems = new Enumerator(colItems); for (; !enumItems.atEnd(); enumItems.moveNext()) { objItem = enumItems.item(); DiskInfo += "Availability: " + objItem.Availability+ "\n"; DiskInfo += "BytesPerSector: " + objItem.BytesPerSector+ "\n"; // Проверяем, существует ли массив try { DiskInfo += "Capabilities: " + (objItem.Capabilities.toArray()).join(",") + "\n"; }catch(e){ DiskInfo += "Capabilities: значение отсутствует\n"; } // Проверяем, существует ли массив try { DiskInfo += "CapabilityDescriptions: " + (objItem.CapabilityDescriptions.toArray()).join(",") + "\n"; }catch(e){ DiskInfo += "CapabilityDescriptions: значение отсутствует\n"; } DiskInfo += "Caption: " + objItem.Caption+ "\n"; DiskInfo += "CompressionMethod: " + objItem.CompressionMethod+ "\n"; DiskInfo += "ConfigManagerErrorCode: " + objItem.ConfigManagerErrorCode+ "\n"; DiskInfo += "ConfigManagerUserConfig: " + objItem.ConfigManagerUserConfig+ "\n"; DiskInfo += "CreationClassName: " + objItem.CreationClassName+ "\n"; DiskInfo += "DefaultBlockSize: " + objItem.DefaultBlockSize+ "\n"; DiskInfo += "Description: " + objItem.Description+ "\n"; DiskInfo += "DeviceID: " + objItem.DeviceID+ "\n"; DiskInfo += "ErrorCleared: " + objItem.ErrorCleared+ "\n"; DiskInfo += "ErrorDescription: " + objItem.ErrorDescription+ "\n"; DiskInfo += "ErrorMethodology: " + objItem.ErrorMethodology+ "\n"; DiskInfo += "Index: " + objItem.Index+ "\n"; DiskInfo += "InstallDate: " + objItem.InstallDate+ "\n"; DiskInfo += "InterfaceType: " + objItem.InterfaceType+ "\n"; DiskInfo += "LastErrorCode: " + objItem.LastErrorCode+ "\n"; DiskInfo += "Manufacturer: " + objItem.Manufacturer+ "\n"; DiskInfo += "MaxBlockSize: " + objItem.MaxBlockSize+ "\n"; DiskInfo += "MaxMediaSize: " + objItem.MaxMediaSize+ "\n"; DiskInfo += "MediaLoaded: " + objItem.MediaLoaded+ "\n"; DiskInfo += "MediaType: " + objItem.MediaType+ "\n"; DiskInfo += "MinBlockSize: " + objItem.MinBlockSize+ "\n"; DiskInfo += "Model: " + objItem.Model+ "\n"; DiskInfo += "Name: " + objItem.Name+ "\n"; DiskInfo += "NeedsCleaning: " + objItem.NeedsCleaning+ "\n"; DiskInfo += "NumberOfMediaSupported: " + objItem.NumberOfMediaSupported+ "\n"; DiskInfo += "Partitions: " + objItem.Partitions+ "\n"; DiskInfo += "PNPDeviceID: " + objItem.PNPDeviceID+ "\n"; // Проверяем, существует ли массив try { DiskInfo += "PowerManagementCapabilities: " + (objItem.PowerManagementCapabilities.toArray()).join(",") + "\n"; }catch(e){ DiskInfo += "PowerManagementCapabilities: значение отсутствует\n"; } DiskInfo += "PowerManagementSupported: " + objItem.PowerManagementSupported + "\n"; DiskInfo += "SCSIBus: " + objItem.SCSIBus+ "\n"; DiskInfo += "SCSILogicalUnit: " + objItem.SCSILogicalUnit + "\n"; DiskInfo += "SCSIPort: " + objItem.SCSIPort + "\n"; DiskInfo += "SCSITargetId: " + objItem.SCSITargetId + "\n"; DiskInfo += "SectorsPerTrack: " + objItem.SectorsPerTrack + "\n"; //DiskInfo += "SerialNumber: " + objItem.SerialNumber + "\n"; // недоступно в XP DiskInfo += "Signature: " + objItem.Signature + "\n"; DiskInfo += "Size: " + objItem.Size + "\n"; DiskInfo += "Status: " + objItem.Status + "\n"; DiskInfo += "StatusInfo: " + objItem.StatusInfo + "\n"; DiskInfo += "SystemCreationClassName: " + objItem.SystemCreationClassName + "\n"; DiskInfo += "SystemName: " + objItem.SystemName + "\n"; DiskInfo += "TotalCylinders: " + objItem.TotalCylinders + "\n"; DiskInfo += "TotalHeads: " + objItem.TotalHeads + "\n"; DiskInfo += "TotalSectors: " + objItem.TotalSectors + "\n"; DiskInfo += "TotalTracks: " + objItem.TotalTracks + "\n"; DiskInfo += "TracksPerCylinder: " + objItem.TracksPerCylinder + "\n\n"; } // выводим данные WScript.Echo(DiskInfo); |