1С и Windows Script Host (WSH) и Windows Management Instrumentation (WMI). ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II




Описание возможностей Windows Script Host и Windows Management Instrumentation.
Подборка "скриптовых" функций и процедур.

Другие части:

1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть I: //infostart.ru/public/165702/
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть III: //infostart.ru/public/166440/

Практическая реализация:

Обработка 1С:Системный Администратор (WSH&WMI): //infostart.ru/public/172189/


ТЕОРИЯ


Microsoft Windows Script Host (WSH) — сервер сценариев Windows.

Используется в качестве инструмента разработки и выполнения специальных сценариев для операционной системы Windows.
Сценарии WSH пишутся на специализированных языках: Microsoft Visual Basic Script Edition (VBScript) или Microsoft JScript.
Свойства и методы объектов Microsoft WSH доступны также в приложениях, способных выступить в роли OLE-клиента.

WSH позволяет работать с:

    — Файловой системой;
    — Ресурсами локальной сети;
    — Реестром;
    — Специальными папками и ярлыками Windows;
    — Процессами. Запускать и контролировать их выполнение.

WSH позволяет взаимодействовать с Microsoft ActiveX:

    — ActiveX Data Object (ADO) — Доступ к базам данных;
    — Active Directory Service Interface (ADSI) — Службы каталогов;
    — Windows Management Instrumentation (WMI) — Инструментарий управления Windows.

Подробно свойства и методы объектов MS Windows Script Host изложены в файле Automation.chm, доступном в ссылках на скачивание.

Windows Management Instrumentation (WMI) — инструментарий управления Windows.

WMI — это одна из базовых технологий для централизованного наблюдения и управления компьютерной инфраструктуры под управлением платформы Windows.
WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management) компании DMTF Inc.
Основа WBEM — Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы.

WMI позволяет работать с:
    — Системой;
    — Приложениями;
    — Оборудованием;
    — Сетями;
    др. управляемыми компонентами.

Подробно о Windows Management Instrumentation (англ.): http://msdn.microsoft.com/en-us/library/windows/desktop/aa394572%28v=vs.85%29.aspx


ПРАКТИКА


Список процедур и функций:

GetDriveInfo() — Ф., позволяющая получить информацию о дисковой подсистеме лок. компьютера. Computer_PhysicalDisk() — Ф., позволяющая получить информацию о физических дисках лок./уд. компьютера. Computer_LogicalDisk() — Ф., позволяющая получить информацию о логических дисках лок./уд. компьютера. GetFolderInfo() — Ф., позволяющая получить значения атрибутов каталога лок. компьютера. GetFileInfo() — Ф., позволяющая получить значения атрибутов файла лок. компьютера. ПрочитатьТекстовыйФайл() — Ф.: Пример чтения текстового файла. СоздатьТекстовыйФайл() — Ф.: Пример создания файла (с проверкой: перезаписать/не перезаписать существующий файл). СоздатьЯрлыкБлокнотНаРабочемСтоле() — Ф. создает ярлык «Блокнот» на рабочем столе. МоиДокументы()Ф. возвращает путь к папке пользователя «Мои документы».


// Функция, позволяющая получить информацию о дисковой подсистеме локального компьютера.
//
&НаСервереБезКонтекста

Функция GetDriveInfo()

    DriveInfo = Новый ТаблицаЗначений;
    // Буква диска (C, D, …).
    DriveInfo.Колонки.Добавить(«DriveLetter»);
    // Тип диска.
    // 0 = Unknown, 1 = Removable, 2 = Fixed, 3 = Network, 4 = CD-ROM, 5 = RAM Disk.
    DriveInfo.Колонки.Добавить(«DriveType»);
    // Тип файловой системы диска.
    DriveInfo.Колонки.Добавить(«FileSystem»);
    // Метка тома.
    DriveInfo.Колонки.Добавить(«VolumeName»);
    // Полный размер диска.
    DriveInfo.Колонки.Добавить(«TotalSize»);
    // Свободное пространство на диске.
    DriveInfo.Колонки.Добавить(«FreeSpace»);
    // Готовность устройства (имеет смысл для съемных дисков или CD/DVD).
    DriveInfo.Колонки.Добавить(«IsReady»);
    // Путь до указанного диска (C:, D:, …).    
    DriveInfo.Колонки.Добавить(«Path»);
    // Корневой каталог диска.
    DriveInfo.Колонки.Добавить(«RootFolder»);
    // Серийный номер диска.
    DriveInfo.Колонки.Добавить(«SerialNumber»);
    // Сетевой путь диска или «» для локального.
    DriveInfo.Колонки.Добавить(«ShareName»);
    
    Попытка
        
        FileSystemObject = Новый COMОбъект(«Scripting.FileSystemObject»);
        FileSystemObject_HARD = FileSystemObject.Drives;
        
        Для Каждого HARD ИЗ FileSystemObject_HARD Цикл
            DriveInfoRecord = DriveInfo.Добавить();
            DriveInfoRecord.DriveLetter = HARD.DriveLetter;
            DriveInfoRecord.DriveType = HARD.DriveType;
            DriveInfoRecord.IsReady = HARD.IsReady;
            Если HARD.IsReady Тогда
                DriveInfoRecord.FileSystem = HARD.FileSystem;
                DriveInfoRecord.VolumeName = HARD.VolumeName;
                DriveInfoRecord.TotalSize = HARD.TotalSize;
                DriveInfoRecord.FreeSpace = HARD.FreeSpace;
                DriveInfoRecord.Path = HARD.Path;
                DriveInfoRecord.RootFolder = HARD.RootFolder.Path;
                DriveInfoRecord.SerialNumber = Строка(HARD.SerialNumber);
                DriveInfoRecord.ShareName = HARD.ShareName;
            КонецЕсли;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат DriveInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о физических дисках локального/удаленного компьютера.
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702
//

&НаСервереБезКонтекста
Функция Computer_PhysicalDisk(Computer = «.»)
    
    Win32_PhysicalDiskInfo = Новый ТаблицаЗначений;
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Availability»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«BytesPerSector»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Capabilities»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«CapabilityDescriptions»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Caption»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«CompressionMethod»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«ConfigManagerErrorCode»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«ConfigManagerUserConfig»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«CreationClassName»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«DefaultBlockSize»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Description»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«DeviceID»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«ErrorCleared»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«ErrorDescription»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«ErrorMethodology»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Index»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«InstallDate»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«InterfaceType»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«LastErrorCode»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Manufacturer»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«MaxBlockSize»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«MaxMediaSize»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«MediaLoaded»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«MediaType»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«MinBlockSize»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Model»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Name»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«NeedsCleaning»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«NumberOfMediaSupported»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Partitions»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«PNPDeviceID»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«PowerManagementCapabilities»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«PowerManagementSupported»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SCSIBus»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SCSILogicalUnit»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SCSIPort»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SCSITargetId»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SectorsPerTrack»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Signature»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Size»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«Status»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«StatusInfo»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SystemCreationClassName»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«SystemName»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«TotalCylinders»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«TotalHeads»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«TotalSectors»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«TotalTracks»);
    Win32_PhysicalDiskInfo.Колонки.Добавить(«TracksPerCylinder»);
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″
);
        Win32_PhysicalDisk = WinMGMT.ExecQuery(«SELECT * from Win32_DiskDrive»);
        
        Для Каждого PhysicalDisk ИЗ Win32_PhysicalDisk Цикл
            PhysicalDiskInfo = Win32_PhysicalDiskInfo.Добавить();
            PhysicalDiskInfo.Availability = PhysicalDisk.Availability;
            PhysicalDiskInfo.BytesPerSector = PhysicalDisk.BytesPerSector;
            PhysicalDiskInfo.Capabilities = PhysicalDisk.Capabilities;
            PhysicalDiskInfo.CapabilityDescriptions = PhysicalDisk.CapabilityDescriptions;
            PhysicalDiskInfo.Caption = PhysicalDisk.Caption;
            PhysicalDiskInfo.CompressionMethod = PhysicalDisk.CompressionMethod;
            PhysicalDiskInfo.ConfigManagerErrorCode = PhysicalDisk.ConfigManagerErrorCode;
            PhysicalDiskInfo.ConfigManagerUserConfig = PhysicalDisk.ConfigManagerUserConfig;
            PhysicalDiskInfo.CreationClassName = PhysicalDisk.CreationClassName;
            PhysicalDiskInfo.DefaultBlockSize = PhysicalDisk.DefaultBlockSize;
            PhysicalDiskInfo.Description = PhysicalDisk.Description;
            PhysicalDiskInfo.DeviceID = PhysicalDisk.DeviceID;
            PhysicalDiskInfo.ErrorCleared = PhysicalDisk.ErrorCleared;
            PhysicalDiskInfo.ErrorDescription = PhysicalDisk.ErrorDescription;
            PhysicalDiskInfo.ErrorMethodology = PhysicalDisk.ErrorMethodology;
            PhysicalDiskInfo.Index = Строка(PhysicalDisk.Index);
            PhysicalDiskInfo.InstallDate = PhysicalDisk.InstallDate;
            PhysicalDiskInfo.InterfaceType = PhysicalDisk.InterfaceType;
            PhysicalDiskInfo.LastErrorCode = PhysicalDisk.LastErrorCode;
            PhysicalDiskInfo.Manufacturer = PhysicalDisk.Manufacturer;
            PhysicalDiskInfo.MaxBlockSize = PhysicalDisk.MaxBlockSize;
            PhysicalDiskInfo.MaxMediaSize = PhysicalDisk.MaxMediaSize;
            PhysicalDiskInfo.MediaLoaded = PhysicalDisk.MediaLoaded;
            PhysicalDiskInfo.MediaType = PhysicalDisk.MediaType;
            PhysicalDiskInfo.MinBlockSize = PhysicalDisk.MinBlockSize;
            PhysicalDiskInfo.Model = PhysicalDisk.Model;
            PhysicalDiskInfo.Name = PhysicalDisk.Name;
            PhysicalDiskInfo.NeedsCleaning = PhysicalDisk.NeedsCleaning;
            PhysicalDiskInfo.NumberOfMediaSupported = PhysicalDisk.NumberOfMediaSupported;
            PhysicalDiskInfo.Partitions = PhysicalDisk.Partitions;
            PhysicalDiskInfo.PNPDeviceID = PhysicalDisk.PNPDeviceID;
            PhysicalDiskInfo.PowerManagementCapabilities = PhysicalDisk.PowerManagementCapabilities;
            PhysicalDiskInfo.PowerManagementSupported = PhysicalDisk.PowerManagementSupported;
            PhysicalDiskInfo.SCSIBus = PhysicalDisk.SCSIBus;
            PhysicalDiskInfo.SCSILogicalUnit = PhysicalDisk.SCSILogicalUnit;
            PhysicalDiskInfo.SCSIPort = PhysicalDisk.SCSIPort;
            PhysicalDiskInfo.SCSITargetId = PhysicalDisk.SCSITargetId;
            PhysicalDiskInfo.SectorsPerTrack = PhysicalDisk.SectorsPerTrack;
            PhysicalDiskInfo.Signature = PhysicalDisk.Signature;
            PhysicalDiskInfo.Size = PhysicalDisk.Size;
            PhysicalDiskInfo.Status = PhysicalDisk.Status;
            PhysicalDiskInfo.StatusInfo = PhysicalDisk.StatusInfo;
            PhysicalDiskInfo.SystemCreationClassName = PhysicalDisk.SystemCreationClassName;
            PhysicalDiskInfo.SystemName = PhysicalDisk.SystemName;
            PhysicalDiskInfo.TotalCylinders = PhysicalDisk.TotalCylinders;
            PhysicalDiskInfo.TotalHeads = PhysicalDisk.TotalHeads;
            PhysicalDiskInfo.TotalSectors = PhysicalDisk.TotalSectors;
            PhysicalDiskInfo.TotalTracks = PhysicalDisk.TotalTracks;
            PhysicalDiskInfo.TracksPerCylinder = PhysicalDisk.TracksPerCylinder;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_PhysicalDiskInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о логических дисках локального/удаленного компьютера.
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.

//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702
//

&НаСервереБезКонтекста
Функция Computer_LogicalDisk(Computer = «.»)
    
    Win32_LogicalDiskInfo = Новый ТаблицаЗначений;
    Win32_LogicalDiskInfo.Колонки.Добавить(«Access»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Availability»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«BlockSize»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Caption»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Compressed»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ConfigManagerErrorCode»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ConfigManagerUserConfig»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«CreationClassName»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Description»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«DeviceID»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«DriveType»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ErrorCleared»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ErrorDescription»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ErrorMethodology»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«FileSystem»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«FreeSpace»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«InstallDate»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«LastErrorCode»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«MaximumComponentLength»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«MediaType»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Name»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«NumberOfBlocks»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«PNPDeviceID»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«PowerManagementCapabilities»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«PowerManagementSupported»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«ProviderName»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Purpose»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«QuotasDisabled»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«QuotasIncomplete»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«QuotasRebuilding»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Size»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«Status»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«StatusInfo»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«SupportsDiskQuotas»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«SupportsFileBasedCompression»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«SystemCreationClassName»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«SystemName»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«VolumeDirty»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«VolumeName»);
    Win32_LogicalDiskInfo.Колонки.Добавить(«VolumeSerialNumber»);
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″
);
        Win32_LogicalDisk = WinMGMT.ExecQuery(«SELECT * from Win32_LogicalDisk»);
        
        Для Каждого LogicalDisk ИЗ Win32_LogicalDisk Цикл
            LogicalDiskInfo = Win32_LogicalDiskInfo.Добавить();
            LogicalDiskInfo.Access = LogicalDisk.Access;
            LogicalDiskInfo.Availability = LogicalDisk.Availability;
            LogicalDiskInfo.BlockSize = LogicalDisk.BlockSize;
            LogicalDiskInfo.Caption = LogicalDisk.Caption;
            LogicalDiskInfo.Compressed = LogicalDisk.Compressed;
            LogicalDiskInfo.ConfigManagerErrorCode = LogicalDisk.ConfigManagerErrorCode;
            LogicalDiskInfo.ConfigManagerUserConfig = LogicalDisk.ConfigManagerUserConfig;
            LogicalDiskInfo.CreationClassName = LogicalDisk.CreationClassName;
            LogicalDiskInfo.Description = LogicalDisk.Description;
            LogicalDiskInfo.DeviceID = LogicalDisk.DeviceID;
            LogicalDiskInfo.DriveType = LogicalDisk.DriveType;
            LogicalDiskInfo.ErrorCleared = LogicalDisk.ErrorCleared;
            LogicalDiskInfo.ErrorDescription = LogicalDisk.ErrorDescription;
            LogicalDiskInfo.ErrorMethodology = LogicalDisk.ErrorMethodology;
            LogicalDiskInfo.FileSystem = LogicalDisk.FileSystem;
            LogicalDiskInfo.FreeSpace = LogicalDisk.FreeSpace;
            LogicalDiskInfo.InstallDate = LogicalDisk.InstallDate;
            LogicalDiskInfo.LastErrorCode = LogicalDisk.LastErrorCode;
            LogicalDiskInfo.MaximumComponentLength = LogicalDisk.MaximumComponentLength;
            LogicalDiskInfo.MediaType = LogicalDisk.MediaType;
            LogicalDiskInfo.Name = LogicalDisk.Name;
            LogicalDiskInfo.NumberOfBlocks = LogicalDisk.NumberOfBlocks;
            LogicalDiskInfo.PNPDeviceID = LogicalDisk.PNPDeviceID;
            LogicalDiskInfo.PowerManagementCapabilities = LogicalDisk.PowerManagementCapabilities;
            LogicalDiskInfo.PowerManagementCapabilities = LogicalDisk.PowerManagementCapabilities;
            LogicalDiskInfo.PowerManagementSupported = LogicalDisk.PowerManagementSupported;
            LogicalDiskInfo.Purpose = LogicalDisk.Purpose;
            LogicalDiskInfo.QuotasDisabled = LogicalDisk.QuotasDisabled;
            LogicalDiskInfo.QuotasIncomplete = LogicalDisk.QuotasIncomplete;
            LogicalDiskInfo.QuotasRebuilding = LogicalDisk.QuotasRebuilding;
            LogicalDiskInfo.Size = LogicalDisk.Size;
            LogicalDiskInfo.Status = LogicalDisk.Status;
            LogicalDiskInfo.StatusInfo = LogicalDisk.StatusInfo;
            LogicalDiskInfo.SupportsDiskQuotas = LogicalDisk.SupportsDiskQuotas;
            LogicalDiskInfo.SupportsFileBasedCompression = LogicalDisk.SupportsFileBasedCompression;
            LogicalDiskInfo.SystemCreationClassName = LogicalDisk.SystemCreationClassName;
            LogicalDiskInfo.SystemName = LogicalDisk.SystemName;
            LogicalDiskInfo.VolumeDirty = LogicalDisk.VolumeDirty;
            LogicalDiskInfo.VolumeName = LogicalDisk.VolumeName;
            LogicalDiskInfo.VolumeSerialNumber = LogicalDisk.VolumeSerialNumber;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_LogicalDiskInfo;
    
КонецФункции


// Функция, позволяющая получить значения атрибутов каталога локального компьютера.
//
&НаСервереБезКонтекста
Функция GetFolderInfo(Folder = «c:program files»)   

    FolderInfo = Новый Структура;

    Попытка
        
        FileSystemObject = Новый COMОбъект(«Scripting.FileSystemObject»);
        FileSystemObject_FOLDER = FileSystemObject.GetFolder(Folder);
        
        // Имя папки.
        FolderInfo.Вставить(«Name», FileSystemObject_FOLDER.Name);
        // Короткое имя папки.
        FolderInfo.Вставить(«ShortName», FileSystemObject_FOLDER.ShortName);
        // Тип папки.
        FolderInfo.Вставить(«Type», FileSystemObject_FOLDER.Type);
        // Признак Корневая/Некорневая.
        FolderInfo.Вставить(«IsRootFolder», FileSystemObject_FOLDER.IsRootFolder);
        // Имя диска, на котором расположена папка.
        FolderInfo.Вставить(«Drive», FileSystemObject_FOLDER.Drive.Path);
        // Родительская папка.
        FolderInfo.Вставить(«ParentFolder», FileSystemObject_FOLDER.ParentFolder.Name);
        // Полный путь.
        FolderInfo.Вставить(«Path», FileSystemObject_FOLDER.Path);
        // Короткий путь.
        FolderInfo.Вставить(«ShortPath», FileSystemObject_FOLDER.ShortPath);
        // Дата создания папки.
        FolderInfo.Вставить(«DateCreated», FileSystemObject_FOLDER.DateCreated);
        // Дата последнего доступа к папке.
        FolderInfo.Вставить(«DateLastAccessed», FileSystemObject_FOLDER.DateLastAccessed);
        // Дата последнего изменения папки.
        FolderInfo.Вставить(«DateLastModified», FileSystemObject_FOLDER.DateLastModified);
        // Аттрибуты папки.
        // 0 — Атрибуты не установлены.
        // 1 — Read-only file.
        // 2 — Hidden file.
        // 4 — System file.
        // 8 — Метка тома.
        // 16 — Папка.
        // 32 — Архивный файл.
        // 64 — Ссылка/Ярык.
        // 128 — Сжатый файл.
        // При сочетании атрибутов их значения суммируются.
        // Например: «c:program files»: 1 (Read-only file) + 16 (Папка) = 17.
        FolderInfo.Вставить(«Attributes», FileSystemObject_FOLDER.Attributes);
        // Количество подпапок.
        FolderInfo.Вставить(«SubFoldersCount», FileSystemObject_FOLDER.SubFolders.Count);
        // Количество файлов.
        FolderInfo.Вставить(«FilesCount», FileSystemObject_FOLDER.Files.Count);
        // Размер папки.
        FolderInfo.Вставить(«Size», FileSystemObject_FOLDER.Size);
       
    Исключение
    КонецПопытки;
    
    Возврат FolderInfo;
    
КонецФункции


// Функция, позволяющая получить значения атрибутов файла локального компьютера.
//
&НаСервереБезКонтекста
Функция GetFileInfo(File = «C:oot.ini»)
   
    FileInfo = Новый Структура;

    Попытка
        
        FileSystemObject = Новый COMОбъект(«Scripting.FileSystemObject»);
        FileSystemObject_FILE = FileSystemObject.GetFile(File);
        
        // Имя файла.
        FileInfo.Вставить(«Name», FileSystemObject_FILE.Name);
        // Короткое имя файла.
        FileInfo.Вставить(«ShortName», FileSystemObject_FILE.ShortName);
        // Тип файла.
        FileInfo.Вставить(«Type», FileSystemObject_FILE.Type);
        // Имя диска, на котором расположен файл.
        FileInfo.Вставить(«Drive», FileSystemObject_FILE.Drive.Path);
        // Родительская папка файла.
        FileInfo.Вставить(«ParentFolder», FileSystemObject_FILE.ParentFolder.Name);
        // Полный путь.
        FileInfo.Вставить(«Path», FileSystemObject_FILE.Path);
        // Короткий путь.
        FileInfo.Вставить(«ShortPath», FileSystemObject_FILE.ShortPath);
        // Размер файла.
        FileInfo.Вставить(«Size», FileSystemObject_FILE.Size);
        // Дата создания файла.
        FileInfo.Вставить(«DateCreated», FileSystemObject_FILE.DateCreated);
        // Дата последнего доступа к файлу.
        FileInfo.Вставить(«DateLastAccessed», FileSystemObject_FILE.DateLastAccessed);
        // Дата последнего изменения файла.
        FileInfo.Вставить(«DateLastModified», FileSystemObject_FILE.DateLastModified);
        // Аттрибуты файла.
        // 0 — Атрибуты не установлены.
        // 1 — Read-only file.
        // 2 — Hidden file.
        // 4 — System file.
        // 8 — Метка тома.
        // 16 — Папка.
        // 32 — Архивный файл.
        // 64 — Ссылка или ярык.
        // 128 — Сжатый файл.
        // При сочетании атрибутов их значения суммируются.
        // Например: «C:oot.ini»: 2 (Hidden file) + 4 (System file) + 32 (Архивный файл) = 38.
        FileInfo.Вставить(«Attributes», FileSystemObject_FILE.Attributes);
        
    Исключение
    КонецПопытки;
    
    Возврат FileInfo;
    
КонецФункции


// Функция прочитать текстовый файл.
// Возвращает массив считанных строк.
//
&НаКлиентеНаСервереБезКонтекста
Функция ПрочитатьТекстовыйФайл(Файл = «D:TXTTXT.TXT»)
    
    Массив = Новый Массив;
    Попытка
        FileSystemObject = Новый COMОбъект(«Scripting.FileSystemObject»);
        Если НЕ FileSystemObject.FileExists(Файл) Тогда
            Сообщить(«Файл: « + Файл + » не существует.»);
            Возврат Массив;
        КонецЕсли;
        FileSystemObject_FILE = FileSystemObject.OpenTextFile(Файл);
        Пока НЕ FileSystemObject_FILE.AtEndOfLine Цикл
            СтрокаФайла = FileSystemObject_FILE.ReadLine();
            Массив.Добавить(СтрокаФайла);
        КонецЦикла;
        FileSystemObject_FILE.Close();
    Исключение
    КонецПопытки;
    
    Возврат Массив;
    
КонецФункции


// Функция: Пример создания файла (с проверкой: перезаписать/не перезаписать существующий файл).
// Возвращает Истина/Ложь.
//
&НаКлиентеНаСервереБезКонтекста
Функция СоздатьТекстовыйФайл(Файл = «D:TXTTXT.TXT», Перезаписать = Истина, Массив)
    
    Если Массив = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    ФайлСозданПерезаписан = Ложь;
    Попытка
        FileSystemObject = Новый COMОбъект(«Scripting.FileSystemObject»);
        Если FileSystemObject.FileExists(Файл) Тогда
            Если Перезаписать Тогда
                FileSystemObject_FILE = FileSystemObject.CreateTextFile(Файл, 1, 0);    // Перезаписать существующий файл.
            Иначе
                Сообщить(«Файл: « + Файл + » уже существует. Содержание не изменено.»);
                Возврат Ложь;
            КонецЕсли;
        Иначе
            FileSystemObject_FILE = FileSystemObject.CreateTextFile(Файл, 0, 0);        // Создать новый файл файл.
        КонецЕсли;
        Для Каждого Элемент ИЗ Массив Цикл
            FileSystemObject_FILE.WriteLine(Элемент);
        КонецЦикла;
        FileSystemObject_FILE.Close();
        ФайлСозданПерезаписан = Истина;
    Исключение
    КонецПопытки;
    
    Возврат ФайлСозданПерезаписан;
    
КонецФункции


// Функция создает ярлык «Блокнот» на рабочем столе.
//
Функция СоздатьЯрлыкБлокнотНаРабочемСтоле()
    
    Попытка
        
        WSHShell = Новый COMОбъект(«WScript.Shell»);
        
        DesktopPath = WSHShell.SpecialFolders.Item(«Desktop»);
        Shortcut = WSHShell.CreateShortcut(DesktopPath + «\Блокнот.lnk»);
        Shortcut.TargetPath = WSHShell.ExpandEnvironmentStrings(«%windir%\notepad.exe»);
        Shortcut.WorkingDirectory = WSHShell.ExpandEnvironmentStrings(«%windir%»);
        Shortcut.HotKey = «CTRL+ALT+N»;
        // 3 — Запустить программу с максимальным по размеру окном.
        // 4 — Запустить программу со стандартным размером окна.
        // 7 — Запустить программу, окно свернуто на панели задач.
        Shortcut.WindowStyle = 4;
        Shortcut.IconLocation = WSHShell.ExpandEnvironmentStrings(«%windir%\notepad.exe, 0»);
        Shortcut.Save();
        
    Исключение
    КонецПопытки;
    
КонецФункции


// Функция возвращает путь к папке пользователя «Мои документы».
//
&НаКлиентеНаСервереБезКонтекста
Функция МоиДокументы()
    
    Попытка
        WshShell = Новый COMОбъект(«Wscript.Shell»);
        WshFolder = WshShell.SpecialFolders.Item(«MyDocuments»);
        Возврат WshFolder;
    Исключение
        Возврат «»;
    КонецПопытки;
    
КонецФункции

МА! С уважением к сообществу МА!


7 Comments

  1. mzelensky

    однозначно +

    Reply
  2. Zas1402

    Автору респект.

    Reply
  3. vec435

    может быть пропустил, поэтому добавлю к функции GetFolderInfo

    //размер папки

    FolderInfo.Вставить(«Size», FileSystemObject_FOLDER.Size);

    //количество подпапок

    FolderInfo.Вставить(«SubFoldersCount», FileSystemObject_FOLDER.SubFolders.Count);

    //количество файлов

    FolderInfo.Вставить(«FilesCount», FileSystemObject_FOLDER.Files.Count);

    Reply
  4. StepByStep

    (3) vec435,

    Спасибо.

    Reply
  5. vec435

    можно продолжить статьи примерами по работе c WMI

    Reply
  6. StepByStep

    Добавлены функции: Computer_PhysicalDisk(), Computer_LogicalDisk().

    Reply
  7. platon_

    //количество подпапок

    FolderInfo.Вставить(«SubFoldersCount», FileSystemObject_FOLDER.SubFolders.Count);

    //количество файлов

    FolderInfo.Вставить(«FilesCount», FileSystemObject_FOLDER.Files.Count);

    я так понял они возвращают только то, что находится на 1 уровень ниже чем основная папка?

    А как получить сколько всего папок и файлов в этой папке? в стандартном интерфейса виндоус такое показано.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *