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

Опубликовал StepByStep в раздел Обработки - Универсальные обработки

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

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

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

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

Обработка 1С:Системный Администратор (WSH&WMI): http://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. Разрешение в брандмауэре.
// Подробности на странице: http://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 + "\root\cimv2");
        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. Разрешение в брандмауэре.
// Подробности на странице: http://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 + "\root\cimv2");
        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:\boot.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:\boot.ini": 2 (Hidden file) + 4 (System file) + 32 (Архивный файл) = 38.
        FileInfo.Вставить("Attributes", FileSystemObject_FILE.Attributes);
        
    Исключение
    КонецПопытки;
    
    Возврат FileInfo;
    
КонецФункции


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


// Функция: Пример создания файла (с проверкой: перезаписать/не перезаписать существующий файл).
// Возвращает Истина/Ложь.
//
&НаКлиентеНаСервереБезКонтекста
Функция СоздатьТекстовыйФайл(Файл = "D:\TXT\TXT.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;
    Исключение
        Возврат "";
    КонецПопытки;
    
КонецФункции

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


См. также

PowerTools от 1 000

Лучшие комментарии

3. vec435 09.01.2013 18:13
может быть пропустил, поэтому добавлю к функции GetFolderInfo
//размер папки
FolderInfo.Вставить("Size", FileSystemObject_FOLDER.Size);
//количество подпапок
FolderInfo.Вставить("SubFoldersCount", FileSystemObject_FOLDER.SubFolders.Count);
//количество файлов
FolderInfo.Вставить("FilesCount", FileSystemObject_FOLDER.Files.Count);
Ответили: (4)
+ 2 [ help1Ckr; StepByStep; ]
# Ответить

Комментарии

1. mzelensky 20.12.2012 07:54
однозначно +
# Ответить
2. Zas1402 20.12.2012 17:13
Автору респект.
# Ответить
3. vec435 09.01.2013 18:13
может быть пропустил, поэтому добавлю к функции GetFolderInfo
//размер папки
FolderInfo.Вставить("Size", FileSystemObject_FOLDER.Size);
//количество подпапок
FolderInfo.Вставить("SubFoldersCount", FileSystemObject_FOLDER.SubFolders.Count);
//количество файлов
FolderInfo.Вставить("FilesCount", FileSystemObject_FOLDER.Files.Count);
Ответили: (4)
+ 2 [ help1Ckr; StepByStep; ]
# Ответить
4. StepByStep 10.01.2013 09:59
(3) vec435,
Спасибо.
# Ответить
5. vec435 10.01.2013 11:25
можно продолжить статьи примерами по работе c WMI
# Ответить
6. StepByStep 06.02.2013 13:04
Добавлены функции: Computer_PhysicalDisk(), Computer_LogicalDisk().
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл