Класс Win32_LogicalDisk используется для получения информации о логических дисках, находящихся в системе (это могут быть как внешние носители, или тот же CD-ROM, так и разделы жесткого диска.
Класс находится в пространстве имен \root\CIMV2 (смотрите статью "Классы 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), а не всем.
Спасибо за внимание. Автор блога Владимир Баталий