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 реестр управление конфигурация системная информация удаленный компьютер

См. также

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

Пользовался ранее https://infostart.ru/1c/articles/1120161/#, но она устарела, т.к. службы запускаются через systemctl, да и сами службы слегка изменились. Возможно, где-то на ИТС уже есть нужная инструкция, но мне не попалась.

15.11.2024    298    Baser    2    

1

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    829    Tantor    19    

14

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    3141    Tantor    38    

34

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

CDC - очень мощный механизм, который можно использовать во многих сценариях, возможность развернуть его в Docker показывает простоту и лёгкость данной технологии.

08.10.2024    732    AlexSvoykin    1    

7

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ и решение ошибок СУБД. Во время реиндексации базы Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Во время проверки целостности Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._RefSInf21806".

19.09.2024    4348    Xershi    10    

17

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    2967    1CUnlimited    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mzelensky 53 20.12.12 07:54 Сейчас в теме
2. Zas1402 20.12.12 17:13 Сейчас в теме
3. vec435 17 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 3687 10.01.13 09:59 Сейчас в теме
5. vec435 17 10.01.13 11:25 Сейчас в теме
можно продолжить статьи примерами по работе c WMI
6. StepByStep 3687 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 уровень ниже чем основная папка?

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