При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 3 способа получения списка дисков компьютера:
Примеры для 8-ой версии, для того чтобы заработало в 7-ой замените:
1 |
Новый COMОбъект( |
на
1 |
СоздатьОбъект( |
1-вый способ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
FSO = Новый COMОбъект("Scripting.FileSystemObject"); // Выборка объектов из коллекции Drives Для каждого Диск Из FSO.Drives Цикл // Диск.DriveLetter - буква диска Стр = Диск.DriveLetter; // Диск.DriveType = 1 - Flash накопитель // Диск.DriveType = 2 - Локальный жесткий диск // Диск.DriveType = 3 - Сетевой диск // Диск.DriveType = 4 - CD/DVD дисковод Если Диск.DriveType = 3 Тогда // если это сетевой диск, то укажем сетевой путь Стр = Стр + " - " + Диск.ShareName; ИначеЕсли Диск.IsReady Тогда Стр = Стр + " - " + Диск.VolumeName; Иначе Стр = Стр + " - [Диск не найден]"; КонецЕсли; Сообщить(Стр); КонецЦикла; |
2-ой способ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//При помощи скрипта получаем перечень всех дисков компьютера: Попытка ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl"); ScrptCtrl.Language="vbscript"; ScrptCtrl.addcode(" |Function GetComputers() | Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"") | Set colDisks = objWMIService.ExecQuery (""Select * from Win32_LogicalDisk"") | For Each objDisk in colDisks | disk = disk & objDisk.DeviceID & "";"" & objDisk.DriveType& "";"" | Next | GetComputers = disk |End Function |"); Текст=СокрЛП(ScrptCtrl.Run("GetComputers")); Исключение Предупреждение(ОписаниеОшибки()); КонецПопытки; //Далее создадим таблицу дисков компьютера ТабДисков = Новый ТаблицаЗначений; ТабДисков.Колонки.Добавить("Диск"); ТабДисков.Колонки.Добавить("Описание"); //Переберая полученную информацию из скрипта добавляем ее в таблицу Пока СтрДлина (Текст)> 0 Цикл Строка = ТабДисков.Добавить(); Строка.Диск = Лев(Текст,2); // Далее определим тип диска: // 1 - Дисковод // 2 - Flash накопитель // 3 - Локальный жесткий диск // 4 - Сетевой диск // 5 - CD/DVD дисковод Строка.Описание = Сред(Текст,4,1); Текст = Сред(Текст,6,СтрДлина (Текст)-5); КонецЦикла; // Далее переберая элементы таблицы выведем флешки в окно сообщений Сообщить("Флешки:"); Для Каждого Элемента Из ТабДисков Цикл Если Элемента.Описание = "2" Тогда Сообщить(Элемента.Диск); КонецЕсли; КонецЦикла; |
3-ий способ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Попытка подключения к WMI на локальном компьютере Попытка Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ServicesSet = Locator.ConnectServer("."); //Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk"); Для каждого Item Из ObjectSet Цикл Сообщить("Имя: " + Item.Caption); Сообщить("Описание: " + Item.Description); // здесь выводится тип диска Сообщить("Файловая система: " + Item.FileSystem); Сообщить("Свободное место: " + Item.FreeSpace); Сообщить("Метка диска: " + Item.VolumeName); Сообщить ("=======================") ; КонецЦикла; |
Автор: Мигачев Евгений