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

20.10.13

База данных - Администрирование СУБД

Описание возможностей 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 + "\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. Разрешение в брандмауэре.
// Подробности на странице: //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;
    Исключение
        Возврат "";
    КонецПопытки;
    
КонецФункции

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


Windows Windows Script Host WSH Windows Management Instrumentation WMI VBS скрипт script реестр управление конфигурация системная информация удаленный компьютер

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    3573    dsdred    48    

66

Инструкция по установке Postgres для OLTP приложений и 1С. Часть 1. Базовая конфигурация

Администрирование СУБД Платформа 1С v8.3 Бесплатно (free)

В Postgres достаточно подробная документация, и, видимо, поэтому при инсталляции Postgres для 1С большинство параметров приходится выставлять самим. Параметров в Postgres много, а составить эффективную комбинацию не так просто. Все упрощается, если рассмотреть профиль нагрузки, например, 1С это прежде всего профиль OLTP нагрузки – так устроены его метаданные (объекты). Если сосредоточиться на оптимизации профиля OLTP, понимание Postgres сразу упростится.

15.02.2024    2271    1CUnlimited    14    

27

Очистка устаревших патчей в конфигурациях на базе БСП

Администрирование СУБД Бесплатно (free)

В этой короткой заметке хочется рассказать о быстром и удобном способе удаления расширений-патчей как в типовых конфигурациях, так и любых других, использующих БСП.

01.02.2024    1306    Sergey1CSpb    20    

15

Как запустить сервер лицензирования 1С на примере облачной платформы

Администрирование СУБД Россия Бесплатно (free)

Чтобы минимизировать подобные риски, связанные с нештатной работой программных клиентских и серверных лицензий, необходимо централизовать их хранение и выдачу. Это можно сделать, разместив лицензии на отдельной машине — сервере лицензирования. В статье рассказываем, как это сделать.

25.01.2024    1543    doctor_it    15    

17

Обслуживание индексов MS SQL Server: как, когда и, главное, зачем?

Администрирование СУБД Бесплатно (free)

Казалось бы, базовое знание: «индексы надо обслуживать, чтобы запросы выполнялись быстро». Но обслуживание индексов выполняется долго и может мешать работе пользователей. Кроме того, в последнее время популярны разговоры о том, что индексы можно вообще не обслуживать – насколько это оправданно? Рассмотрим: на что влияет обслуживание индексов, когда надо и когда не надо его выполнять, и если надо – как это сделать так, чтобы никому не помешать?

16.01.2024    5510    Филин    11    

44

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    5703    n_mezentsev    15    

23

Дефрагментация индексов MS SQL для платформы 8.3.22

Инструменты администратора БД Администрирование СУБД Абонемент ($m)

Начиная с 8.3.22 фирма "1С" убрала блокировки БД на уровне страниц; если БД расположена в MS SQL, то стала возникать проблема при дефрагментации индексов с использованием команды ALTER INDEX REORGANIZE. Предлагаю модификацию известного скрипта, который позволяет обойти эту проблему.

1 стартмани

15.11.2023    2081    17    baturo    6    

12

Мигрируем с MS SQL на PostgreSQL

Администрирование СУБД Бесплатно (free)

Переход с MS SQL на PostgreSQL сопряжен с рисками для бизнеса и неизбежно вызывает множество вопросов. Статья посвящена тому, как заранее подготовиться к предстоящей миграции, провести нагрузочное тестирование, выявить возможные проблемы перехода и провести необходимую оптимизацию.

13.11.2023    10380    ivanov660    31    

73
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mzelensky 53 20.12.12 07:54 Сейчас в теме
2. Zas1402 20.12.12 17:13 Сейчас в теме
3. vec435 15 09.01.13 18:13 Сейчас в теме
может быть пропустил, поэтому добавлю к функции GetFolderInfo
//размер папки
FolderInfo.Вставить("Size", FileSystemObject_FOLDER.Size);
//количество подпапок
FolderInfo.Вставить("SubFoldersCount", FileSystemObject_FOLDER.SubFolders.Count);
//количество файлов
FolderInfo.Вставить("FilesCount", FileSystemObject_FOLDER.Files.Count);
help1Ckr; StepByStep; +2 Ответить
4. StepByStep 3666 10.01.13 09:59 Сейчас в теме
5. vec435 15 10.01.13 11:25 Сейчас в теме
можно продолжить статьи примерами по работе c WMI
6. StepByStep 3666 06.02.13 13:04 Сейчас в теме
Добавлены функции: Computer_PhysicalDisk(), Computer_LogicalDisk().
7. platon_ 10 09.11.18 17:09 Сейчас в теме
//количество подпапок
FolderInfo.Вставить("SubFoldersCount", FileSystemObject_FOLDER.SubFolders.Count);
//количество файлов
FolderInfo.Вставить("FilesCount", FileSystemObject_FOLDER.Files.Count);

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

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