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

См. также

Устранение ошибки выполнения скрипта "Создать сервис RAGENT" в ЦКК

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

В статье показано, как устранить ошибку выполнения скрипта "Создать сервис RAGENT" в системах 1С:Центр контроля качества или в 1С:Центр автоматизации. Будет полезна администраторам ЦКК и ЦА, которые только начали знакомство с этими системами.

18.04.2024    316    artemusII    0    

6

Долгая реструктуризация, замеры времени и очистка Ветис. Розница 2.3

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

При подготовке к обновлению возникли проблемы на стадии тестирования и исправления базы данных, также при создании файлов РИБ для магазинов.

16.04.2024    310    xKaskadx    4    

1

Установка и получение лицензии на базовую конфигурацию 1С на Mac OS

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

Установить купленную базовую конфигурацию 1С и получить лицензию на MAC OS не так просто, как кажется на первый взгляд и как хотелось бы. Официально в системных требованиях на базовую конфигурации 1С пишет всякие виндовсы и пару-тройку линуксов. МакОс там нет. В статье расскажу, как все-таки поставить на Мак базовую конфигурацию 1С.

11.04.2024    371    pahmutov    0    

2

Установка тонкого клиента 1С на Rasbian (Raspberry Pi 5)

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

После приобретения Raspberry Pi 5 решил проверить, есть ли возможность использования устройства для организации тонкого клиента. В результате столкнулся с особенностью установки 1С: Предприятие 8.3.23 на Raspbian, решением которой я хочу поделиться с сообществом.

07.04.2024    677    Bessome    3    

5

Порционный шринк базы

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

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

28.03.2024    1303    Garilia    3    

15

Создаем сценарии обслуживания SQL в Центре Контроля Качества 1С (Центр Администрирования)

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

Данная статья научит вас, как создавать скрипты обслуживания MS SQL для Центра Контроля Качества (ЦКК) или Центра Администрирования (ЦА).

20.03.2024    775    Silenser    0    

5

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

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

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

11.03.2024    6061    dsdred    59    

86

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

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

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

15.02.2024    2587    1CUnlimited    14    

28
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 3671 10.01.13 09:59 Сейчас в теме
5. vec435 15 10.01.13 11:25 Сейчас в теме
можно продолжить статьи примерами по работе c WMI
6. StepByStep 3671 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 уровень ниже чем основная папка?

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