Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим, как можно получить информацию о жестком диске программным способом, с использованием простого текстового блокнота…
Прежде всего, нужно усвоить, что мы будет пользоваться возможностями сервера сценариев Windows Script Host для программирования нужных скриптов. Информация о жестком диске извлекается с помощью объекта Drive и коллекции Drives. Объект Drive содержит свойства для получения такой информации о диске как: серийный номер, тип файловой системы, размер, метку и так далее, коллекция Drives содержит объекты Drive для всех доступных жестких дисков компьютера, в том числе для сетевых и со сменными носителями, у нее нет дополнительных свойств или методов. Что бы получить доступ к объекту Drive, используется метод GetDrive (в качестве параметра передается имя, допустимые варианты: "C ", "C: ", "C: ") объекта FileSystemObject.
Информация о жестком диске – практическая сторона
Прежде всего, давайте познакомимся со свойствами объекта Drive, которые позволяют получить нужную информацию о жестком диске:
AvailableSpace – Позволяет получить объем доступного для пользователя места в байтах.
DriveLetter – Вернет букву (без двоеточия или черточки), которая ассоциируется с локальным устройством или сетевым ресурсом. Это свойство доступно только для чтения.
DriveType – Позволяет определить тип тома. Используемые типы (в скобках указано цифровое значение):
- Unknown — Неизвестный тип (тип не определяется) (0).
- Removable — Привод со сменным носителем (например, флешка) (1)
- Fixed – Фиксированное устройство. Этот тип также включает сменные жесткие носители (2).
- Remote — Сетевой. Выводится только для подключенных ресурсов (совместно используемых дисков и папок) (3).
- CDROM — Привод CD-ROM, CD-R и CD-RW не различаются (4).
- RAMDisk – Смонтированный образ. Виртуальный носитель можно создать с помощью такой программы как Deamon Tools (5).
FileSystem – Информация о жестком диске, такая как тип файловой системы, например, FAT, NTFS или CDFS.
FreeSpace — Позволяет получить объем доступного места в байтах на локальном или сетевом ресурсе. Доступно только для чтения
IsReady — Содержит true, если устройство готово для чтения, и false в противном случае. Для устройств со сменными носителями и приводов CD-ROM, Свойство IsReady возвращает true только в том случае, когда в дисковод вставлен соответствующий носитель, и устройство готово предоставить доступ к этому носителю
Path – Информация о жестких дисках в виде пути к ним, вернет, например: «C:», «D:» и так далее.
RootFolder – Корневой каталог, вернет строку вида «C:», «D:» и так далее. Также, содержит ссылку на объект Folder.
SerialNumber — Информация о носителе (жестком диске) в виде десятичного серийного номера тома.
ShareName – Сетевое имя. Если объект не является сетевым, то свойство вернет пустую строку («»).
TotalSize — Позволяет получить общий объем в байтах на локальном или сетевом ресурсе.
VolumeName – Информация о жестких дисках в виде метки тома, если метки нет, вернет пустую строку («»). Свойство доступно как для чтения, так и для записи:
FSO = WScript.CreateObject("Scripting.FileSystemObject"); D = FSO.GetDrive("d:\\"); D.VolumeName="Новая Метка"; |
Для смены метки нужны права администратора.

Ну что же, теперь можно приступить к программированию. Давайте сделаем так, я сначала покажу вам программный код сценариев, а уже в конце статьи дам краткое описание программного кода.
Вот пример скрипта на языке VBScript, который выводит информацию о жестких дисках компьютера:
' *********************************************************************** ' Объект Drive ' Информация о жестком диске ' informatciya-o-diskah.vbs ' *********************************************************************** Option Explicit ' Константы типов дисков Const Unknown = 0 Const Removable = 1 Const Fixed = 2 Const Remote = 3 Const CDROM = 4 Const RAMDisk = 5 Dim Text, Title Dim fso, oDrive, curDrive Dim drtype(6) drtype(0) = " Неизвестный носитель " drtype(1) = " Сменный носитель " drtype(2) = " Фиксированный диск " drtype(3) = " Сетевой ресурс " drtype(4) = " CDROM " drtype(5) = " Смонтированный образ " Text = "Информация об имеющихся жестких дисках" & vbCrLf & vbCrLf Title = "Выводим информацию о доступных жестких дисках" Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' Получаем доступ к коллекции Drives Set oDrive = fso.Drives 'Перебор всех устройств For Each curDrive In oDrive Text = Text & curDrive.DriveLetter & vbTab 'Определяем тип Text = Text & drtype(curDrive.DriveType) & vbTab Select Case curDrive.DriveType Case Fixed If curDrive.IsReady Then Text = Text & "Объем:" & curDrive.TotalSize & vbTab & "Метка:" & curDrive.VolumeName & vbTab & "Файловая система:" & curDrive.FileSystem & vbTab End If Case Removable If curDrive.IsReady Then Text = Text & "Объем:" & curDrive.TotalSize & vbTab & "Метка:" & curDrive.VolumeName & vbTab & "Файловая система:" & curDrive.FileSystem & vbTab End If Case CDROM If curDrive.IsReady Then Text = Text & "Объем:" & curDrive.TotalSize & vbTab & "Метка:" & curDrive.VolumeName & vbTab & "Файловая система:" & curDrive.FileSystem & vbTab End If Case Remote Text = Text & curDrive.ShareName & vbTab Case Else Text = Text & curDrive.VolumeName & vbTab End Select Text = Text & vbCrLf Next MsgBox Text, vbOKOnly + vbInformation, Title |

Аналогичный пример, но уже на языке JScript:
// *********************************************************************** // Вывод информации о дисках // informatciya-o-diskah.js // *********************************************************************** var Text1, Title; var fso, oDrive, curDrive1, WshShell; var drtype; drtype = new Array(6) drtype[0] = " Неизвестный носитель "; drtype[1] = " Сменный носитель "; drtype[2] = " Фиксированный диск "; drtype[3] = " Сетевой ресурс "; drtype[4] = " CDROM "; drtype[5] = " Смонтированный образ "; var vbOKOnly = 0; var vbInformation = 64; var Unknown = 0 var Removable = 1 var Fixed = 2 var Remote = 3 var CDROM = 4 var RAMDisk = 5 Text1 = "Информация об имеющихся жестких дисках\n\n"; Title = "Выводим информацию о доступных дисках"; FSO = WScript.CreateObject("Scripting.FileSystemObject"); WshShell = WScript.CreateObject("WScript.Shell"); // Получаем доступ к коллекции Drives oDrive = new Enumerator(FSO.Drives) ; for (;!oDrive.atEnd();oDrive. moveNext()) { curDrive1=oDrive.item (); Text1+=curDrive1.DriveLetter + "\t"; //Определяем тип Text1+=drtype[curDrive1.DriveType] + "\t"; if (curDrive1.DriveType==Fixed){ if (curDrive1.IsReady){ Text1+="Объем:" + curDrive1.TotalSize + "\t"; Text1+="Метка:" + curDrive1.VolumeName + "\t"; Text1+="Файловая система:" + curDrive1.FileSystem + "\t"; } }else if (curDrive1.DriveType==Removable){ if (curDrive1.IsReady){ Text1+="Объем:" + curDrive1.TotalSize + "\t"; Text1+="Метка:" + curDrive1.VolumeName + "\t"; Text1+="Файловая система:" + curDrive1.FileSystem + "\t"; } }else if (curDrive1.DriveType==CDROM){ if (curDrive1.IsReady){ Text1+="Объем:" + curDrive1.TotalSize + "\t"; Text1+="Метка:" + curDrive1.VolumeName + "\t"; Text1+="Файловая система:" + curDrive1.FileSystem + "\t"; } }else if (curDrive1.DriveType==Remote) Text1+="Файловая система:" + curDrive1.ShareName + "\t"; else Text1+="Метка:" + curDrive1.VolumeName + "\t"; Text1+="\n"; } WshShell.Popup(Text1,0,Title, vbOKOnly + vbInformation); |
Хорошо, с программированием закончили, теперь можно дать и объяснение. Весь процесс получения информации и дисках вертится в одном цикле, так, в программном коде на языке vbscript мы использовали цикл For Each, а в программном коде на языке jscript мы использовали цикл for. Суть в том, что в цикле происходит перебор всех возможных устройств для хранения данных, проверяется тип каждого устройства (жесткий диск, сетевой ресурс и так далее). Далее в переменную Text происходит запись информации: файловая система, объем и метка носителя. После того как цикл завершит обработку всех носителей, произойдет вывод диалогового окна, в котором будет отображаться информация о жестких дисках, найденных в системе.