Класс Win32_LogicalDisk — информация о логических дисках

Класс Win32_LogicalDisk — информация о логических дисках Объектная модель Windows Management Instrumentation

Класс Win32_LogicalDisk используется для получения информации о логических дисках, находящихся в системе (это могут быть как внешние носители, или тот же CD-ROM, так и разделы жесткого диска.

Класс находится в пространстве имен rootCIMV2 (смотрите статью «Классы WMI, пространство имен и CIM«) и предоставляется провайдером Win32, библиотечная библиотека — Cimwin32.dll, описание находится в MOF файле Cimwin32.mof. Давайте сперва посмотрим на логические связи данного класса с остальными.

Если воспользоваться утилитой WMI CIM Studio, выбрать в левой панели класс Win32_LogicalDisk, а в правой перейти на вкладку Associations, то можно увидеть, что наш класс связан с четырьмя другими классами (Win32_QuotaSettings, Win32_LogicalDisk, Win32_LogicalDisk, Win32_LogicalDisk) посредством ассоциативных связей, это позволяет, например, получить информацию о квотах при работе с одним экземпляром класса Win32_LogicalDisk.

Отображение в утилите WMI CIM Studio ассоциативных классо с Win32_LogicalDisk

Подобную информацию можно также получить средствами утилит командной строки WMIC, просто выполните команду:

wmic CLASS Win32_LogicalDisk ASSOC

Вывод данных производится в формате htm файла, поэтому логично перенаправить вывод во внешний файл, например:

wmic CLASS Win32_LogicalDisk ASSOC>"путь к внешнему документу"

Хорошо, теперь давайте рассмотрим экземпляры класса, которыми будут являться все логические диски в системе. Если воспользоваться той же утилитой CIM Studio, то выбрав этот же класс и в правой панели нажав на кнопку Instances (Экземпляры), мы получим список всех экземпляров класса, а в реалии – логические диски, двойной щелчок по любому из них позволит просмотреть его свойства.

Отображение логических дисков в утилите CIM Studio

Из рисунка видно, что на данный момент в системе четыре логических диска. Просто я разбил жесткий диск на два, плюс DVD и плюс один виртуальный диск для монтирования образов. Прежде чем приступать к написанию сценариев и описанию свойств и методов класса, попробуем ввести в командной строке такой запрос:

wmic PATH Win32_LogicalDisk GET DeviceID

На выходе мы получим значения свойства DeviceID:

  • C:
  • D:
  • E:
  • F:

Для того, что бы получить значения свойств для конкретного экземпляра, например, логического диска “C:”, то надо ввести в командной строке команду:

wmic PATH Win32_LogicalDisk WHERE "DeviceID='C:'"GET

Однако, можно сформировать вывод данных в более читабельной форме, например:

wmic PATH Win32_LogicalDisk WHERE "DeviceID='C:'"GET/FORMAT:HTABLE>"d:\work\info.htm"

или для всех логических дисков

wmic PATH Win32_LogicalDisk GET /FORMAT:HFORM>"d:\work\info.htm"

В итоге, мы получим htm файл, содержащий таблицу с данными, как показано на рисунке (некоторые и пустые строки я удалил).

Список свойств для логического диска

Методы Win32_LogicalDisk

Chkdsk(FixErrors, VigorousIndexCheck, SkipFolderCycle, ForceDismount, RecoverBadSector, OKToRunAtBootUp)  — Данный метод позволяет осуществить проверку диска. Этот метод применим только к тем экземплярам логического диска, которые представляют физический диск в машине. Это не относится к сопоставленных логических дисков.

  • FixErrors – Определяет процесс проверки. Если TRUE, то ошибки фиксируются. По умолчанию используется FALSE.
  • VigorousIndexCheck — Если TRUE, проверка записей индекса должна быть выполнено. По умолчанию TRUE.
  • SkipFolderCycle – параметр принимает логические значения, если значение TRUE (по умолчанию), то произойдет пропуск проверки циклов.
  • ForceDismount – Если значение TRUE, то при необходимости предварительное отключение тома. Значение по умолчанию FALSE.
  • RecoverBadSector – Если TRUE, то произойдет поиск поврежденных секторов и восстановление информации. По умолчанию FALSE.
  • OKToRunAtBootUp — Если TRUE, то процесс проверки произойдет после перезагрузки системы. По умолчанию FALSE.

ExcludeFromAutochk(LogicalDisk) — Метод позволяет исключить заданные логические диски из проверки после перезагрузки, даже если они (диск) содержат “грязный бит”.

  • LogicalDisk – Параметр является массивом, содержащим список дисков для исключения. Пример, на языке vbscript:
ExcludeFromAutoChk(Array("C:", "D:"))

Свойства Win32_LogicalDisk

BlockSizeРазмер блока в байтах, (CIM_StorageExtent).

Compressedуказывает, рассматривается ли логический диск системой как единый сжатый объект, как например том DoubleSpace. Если поддерживается пофайловое сжатие (как для NTFS), значение свойства равно FALSE.

DescriptionОписание объекта, (CIM_ManagedSystemElement).

DeviceIDидентификатор логического диска (CIM_LogicalDevice)

DriveTypeтип логического диска. Значения:

  • 0 — Unknown
  • 1 — No Root Directory
  • 2 — сменный диск
  • 3 — жесткий диск
  • 4 — сетевой диск
  • 5 — CD-ROM
  • 6 — RAM диск

FileSystemтип файловой системы

FreeSpaceобъем в байтах доступного дискового пространства, (CIM_LogicalDisk).

MaximumComponentLengthСодержит максимальную длину компонента имени файла, поддерживаемую накопителем Win32. Компонент имени файла — часть имени файла между двумя обратными косыми чертами.  Так, для FAT, свойство вернет значение 255, а не 8+3, как раньше. Длинные имена так же поддерживаются файловой системой NTFS

MediaTypeуказывает тип носителя, находящегося в логическом устройстве. Это свойство может принимать значения из перечисления MEDIA_TYPE, описанного в файле winioctl.h. Значение может быть неточным для съемных накопителей, если в устройстве нет носителя.

Значения:

  • 0 — Формат неизвестен»,
  • 11 — Съемный носитель (не дискета)
  • 12 — Несъемный жесткий диск

Nameуказывает сетевой путь к логическому устройству (CIM_ManagedSystemElement).

NumberOfBlocksОбщее число последовательных блоков, образующих область хранения. Размер одного блока содержится в свойстве BlockSize. Размер области может быть вычислен путем умножения значения свойства BlockSize на значение описываемого свойства. Если значение свойства BlockSize равно 1, данное свойство указывает полный размер области, (CIM_StorageExtent).

PNPDeviceIDУказывает Win32-идентификатор логического устройства Plug and Play. Пример: *PNP030b, (CIM_LogicalDevice)

PowerManagementCapabilitiesУказывает возможности логического устройства, связанные с электропитанием.

  • 0 — Нет данных
  • 1 — Не поддерживается
  • 2 — Отключено
  • 3 – Разрешено — означает, что возможности по управлению электропитанием задействованы, но информация о них отсутствует.
  • 4 — Режимы энергосбережения выбираются автоматически — указывает, что устройство может изменить режим энергосбережения в зависимости от некоторых условий.
  • 5 — Режимы энергосбережения устанавливаются вручную —  указывает, что поддерживается метод SetPowerState.
  • 6 — Поддерживаются циклы электропитания —  указывает, что метод SetPowerState может быть вызван с параметром PowerState установленным в 5 (Цикл электропитания).
  • 7 — Поддерживается включение по времени — указывает, что метод SetPowerState можно вызывать с параметром PowerState, значение которого равно 5 (Цикл электропитания), и в качестве значения параметра Time передаются конкретные время и дата или же интервал включения

PowerManagementSupportedЛогический параметр, указывающий, позволяет ли устройство управление питанием — т.е., может ли быть оно переведено в режим низкого энергопотребления. Это логическое значение не позволяет определить, включены в данный момент средства управления питанием или нет, или какие именно средства поддерживаются. Вся информация хранится в массиве PowerManagementCapabilities. Если данная переменная содержит значение FALSE (ложь), то массив PowerManagementCapabilities должен состоять из единственной строки «Not Supported», со значением 1.

ProviderNameуказывает сетевой путь к логическому устройству.

PurposeСтрока произвольного вида, описывающая носитель и его использование, (CIM_StorageExtent).

QuotasDisabledЧтение/запись, указывает, что на данном томе управление квотами не установлено.

QuotasIncompleteуказывает, что управление квотами использовалось, но было отключено. Имеется в виду то, что данные на логическом диске, использовавшиеся для управления квотами, теперь неактуальны.

QuotasRebuildingуказывает на активное состояние, в котором файловая система находится при сборе информации и настройке логического диска на управление квотами.

SizeРазмер диска в байтах, (CIM_LogicalDisk).

Statusявляется строкой, определяющей текущее состояние объекта

SupportsDiskQuotasуказывает, поддерживает ли этот том дисковые квоты.

SupportsFileBasedCompressionуказывает, поддерживает ли раздел логического диска пофайловое сжатие, как в случае NTFS. Свойство вернет FALSE, когда значение свойства Compressed равно TRUE. Значения: TRUE или FALSE. Если TRUE, логический диск поддерживает пофайловое сжатие.

SystemCreationClassNameИмя класса создания системы, (CIM_LogicalDevice).

VolumeDirtyопределяет, нужно ли выполнять операцию проверки логического диска во время следующей загрузки. Свойство применимо только к тем логическим дискам, которые представлены физическим диском в компьютере. Оно неприменимо к присоединенным дискам.

VolumeNameуказывает имя тома логического диска.

VolumeSerialNumberуказывает серийный номер тома логического диска.

Ниже два сценария (на языке vbscriptWin32_LogicalDisk.vbs и jscriptWin32_LogicalDisk.js), которые выводят информацию о логических дисках.

'**************************************************************
' Информация о логических дисках
' Win32_LogicalDisk.vbs
'**************************************************************
 
' Поключенрие к локальной системе
strComputer = "."
strNameSpace = "\root\cimv2"
' Получаем доступ к инструментарию Windows Management Instrumentation
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"  & strComputer & strNameSpace)
' выполняем WQL запрос и получаем коллекцию
Set colItems = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
 
LogicalInfo = "Информация о логических дисках" & vbCrLf
 
' Начинаем перебор коллекции
For Each objItem in colItems
    ' Начинаем перебор всех свойств для текущего экземпляра класса WMI
    For Each objClassProperty In objItem.Properties_
        ' Если значение больше 0
        If Len(objClassProperty.value)>0 Then 
            LogicalInfo = LogicalInfo & objClassProperty.Name &"= " & objClassProperty.value &vbCrLf
        End If
    Next
    LogicalInfo = LogicalInfo & "----------------------------------------------" &vbCrLf &vbCrLf
Next 
 
' Выводим содержимое переменной LogicalInfo
WScript.Echo LogicalInfo
//**************************************************************
// Информация о логических дисках
// Win32_LogicalDisk.js
//**************************************************************
 
// Поключенрие к локальной системе
strComputer = ".";
strNameSpace = "\\root\\cimv2";
// Получаем доступ к инструментарию Windows Management Instrumentation
objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\"  + strComputer + strNameSpace);
// выполняем WQL запрос и получаем коллекцию
colItems = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk");
 
// Начинаем перебор коллекции
objItem = new Enumerator(colItems);
 
LogicalInfo = "Информация о логических дисках\n\n";
 
for (; !objItem.atEnd(); objItem.moveNext()) {
    objItemC = objItem.item();
    // Начинаем перебор всех свойств для текущего экземпляра класса WMI
    objClassPropertyC = new Enumerator(objItemC.Properties_);
 
    for (; !objClassPropertyC.atEnd(); objClassPropertyC.moveNext()) {
    objClassProperty = objClassPropertyC.item();
 
        // Если значение больше 0
        strVal = objClassProperty.value
        if (strVal != null){
            LogicalInfo+= objClassProperty.Name + "= " + objClassProperty.value + "\n";
        }
    }
    LogicalInfo += "----------------------------------------------\n\n";
}
 
// Выводим содержимое переменной LogicalInfo
WScript.Echo(LogicalInfo)

Полагаю, вы заметили, что статья получилась довольно большой, именно за счет описания свойств, которые хранят информацию о логических дисках. Однако, это является временной необходимостью, так как в следующих статьях по классам я просто буду ссылаться на класс Win32_LogicalDisk, и описывать только свойства присущие конкретному классу WMI (Windows management instrumentation), а не всем.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий