Класс 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.
Подобную информацию можно также получить средствами утилит командной строки WMIC, просто выполните команду:
wmic CLASS Win32_LogicalDisk ASSOC |
Вывод данных производится в формате htm файла, поэтому логично перенаправить вывод во внешний файл, например:
wmic CLASS Win32_LogicalDisk ASSOC>"путь к внешнему документу" |
Хорошо, теперь давайте рассмотрим экземпляры класса, которыми будут являться все логические диски в системе. Если воспользоваться той же утилитой CIM Studio, то выбрав этот же класс и в правой панели нажав на кнопку Instances (Экземпляры), мы получим список всех экземпляров класса, а в реалии – логические диски, двойной щелчок по любому из них позволит просмотреть его свойства.
Из рисунка видно, что на данный момент в системе четыре логических диска. Просто я разбил жесткий диск на два, плюс 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— указывает серийный номер тома логического диска.
Ниже два сценария (на языке vbscript — Win32_LogicalDisk.vbs и jscript — Win32_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), а не всем.