Класс 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); |
Спасибо за внимание. Автор блога Владимир Баталий