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

14.01.15

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

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

Следующие:

1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II: //infostart.ru/public/166391/
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


ПРАКТИКА


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

- Computer_WindowsInfo() - Ф., позволяющая получить информацию об установленной Windows на лок./уд. компьютере.
- SendKeys() - П.: - Имитация нажатия клавиш.
-
ПреобразоватьИзСтрокиВДату() - Ф., возвращающая результат преобразования строкового значения даты в значение в формате даты.

-
ВремяВМиллисекундах() - Ф., возвращающая время в миллисекундах или секундах.

-
ЗадержкаВВыполнении()
- Ф. задержки выполнения процесса.

-
SetDateTime() - Ф. вызова оснастки установки системных Даты и Времени.

-
ControlPanelItem() - Ф. вызова оснастки Панели управления.

-
SystemEnvironment() - Ф., позволяющая получить Переменные окружения лок. компьютера.
- Computer_Motherboard() - Ф., позволяющая информацию о материнской плате лок./уд. компьютера.
-
Computer_BIOS() - Ф., позволяющая информацию о BIOS лок./уд. компьютера.

-
Computer_Processor() - Ф., позволяющая получить информацию о процессоре(ах) на лок./уд. компьютере.

-
Computer_RAM() - Ф., позволяющая получить информацию о памяти на лок./уд. компьютере.

-
Computer_TotalPhysicalMemory() - Ф., позволяющая получить информацию об объеме установленной памяти на лок./уд. компьютере.

-
Computer_PhysicalMemory() - Ф., позволяющая получить информацию о физической памяти на лок./уд. компьютере.

-
Computer_VirtualMemory() - Ф., позволяющая получить информацию о виртуальной памяти на лок./уд. компьютере.

-
Computer_Video(
Ф., позволяющая получить информацию о видео на лок./уд. компьютере.
-
Computer_Monitor() - Ф., позволяющая получить информацию о мониторе(ах) на лок./уд. компьютере.
- Computer_Printer() - Ф., позволяющая получить список подключенных принтеров лок./уд. компьютера.
-
Network_Printer() - П. подключения сетевого принтера.
-
User_ComputerSystem() - Ф., позволяющая получить Имя пользователя, зарегистрировавшегося на лок./уд. компьютере.
-
GET_ComputerName_UserName_UserDomain() - Ф., позволяющая получить локальные имена: Компьютера, Пользователя, Домена.
- Computer_UserList() - Ф., позволяющая получить список учётных записей на лок./уд. компьютере.
-
Computer_GroupList() - Ф., позволяющая получить список групп пользователей на лок./уд. компьютере.
-
Computer_GroupUsersList() - Ф., позволяющая получить список групп и их пользователей на лок./уд. компьютере.
-
Computer_BuildINAdministrator() - Ф., позволяющая получить данные встроенной учетной записи Администратора на лок./уд. компьютере.
-
Computer_NetworkAdapter() - Ф., позволяющая получить информацию о сетевых адаптерах на лок./уд. компьютере.
-
NetworkNeighborhood() - Ф. получения информации о сетевом окружении.
-
Computer_PING() - Ф., позволяющая невизуально "пропинговать" удаленный компьютер.

-
Computer_SystemService() - Ф., позволяющая получить информацию о службах на лок./уд. компьютере.
-
Computer_SystemProcess() - Ф., позволяющая получить информацию о процессах на лок./уд. компьютере.
-
Computer_KillProccess() - Ф., позволяющая завершить некий процесс на лок./уд. компьютере.
-
Computer_EventsList() - Ф., позволяющая получить список событий за период из журналов System/Application лок./уд. компьютера.
-
Computer_ServerSession() - Ф., позволяющая получить информацию об открытых сессиях на сервере (локальный/удаленный компьютер).
-
Computer_Terminal() - Ф., позволяющая получить информацию о терминальных сессиях на сервере (локальный/удаленный компьютер).
-
Computer_ServerConnection() - Ф., позволяющая получить информацию об установленных подключениях к серверу (лок./уд. компьютер).
- Computer_RebootShutdown() - Ф., позволяющая произвести завершение сеанса/перезагрузку/выключение лок./уд. компьютера.


/*
// Windows Management Instrumentation - Инструментарий управления Windows:
//
// Для выполнения следующих действий необходимы права Администратора Windows.
//
// Перед применением функций, испоьзующих WMI на локальном/удаленном компьютере
// необходимо изменить и проверить настройки Windows:
// (выполняется локально на каждом компьютере)
//
// 1. Состояние службы Windows Management Instrumentation (WMI):
//    
//    Имя Службы: "Инструментарий управления Windows"
//    Запуск: "Автоматически".
//
// 2. Разрешение в брандмауэре Windows:
//
//    ОБЯЗАТЕЛЬНО:
//
//    Общий доступ к файлам и принтерам:
//    Если используется брандмауэр Windows,то он автоматически открывает порты,
//    необходимые для предоставления общего доступа к файлам и принтерам, после включения обнаружения сети.
//
//    Разрешение для PING:
//
//    Вкладка "Дополнительные параметры - ICMP":
//    Разрешить запрос входящего эха.
//
//    Разрешить "Удаленное управление Windows":
//    (Становится доступным "Сервер RPC").
//
//    Windows XP:
//    Из комендной строки:
//    netsh firewall set service type = REMOTEADMIN mode = ENABLE scope = SUBNET
//
//    Разрешить "Инструментарий управления Windows (WMI)":
//    (Становится доступным "Сервер RPC").
//
//    Windows 7:
//    Предпочтительный способ:
//    Включить в оснастке брандмауэра исключения для "Инструментарий управления Windows (WMI)".
//    ИЛИ
//    Из комендной строки:
//    netsh advfirewall firewall set rule group="Инструментарий управления Windows (WMI)" new enable=Yes
//
//    Использование WMI на Windows 2003:
//    Например: функции Computer_Programs_Product()  см. 1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть III.
//   
Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.

//
//    При запуске на  на компьютере под управлением Windows Server 2003 возможна ошибка чтения данных,
//    т.к. поставщик объекта Win32_Product по умолчанию в Windows Server 2003 не устаналивается.
//    Установка:
//    Панель управления - Установка и уделение программ - Установка компонентов Windows - Средства наблюдения и управления:
//    Компонента: "Поставщик установщика Windows через WMI".
//
//    ВОЗМОЖНО:
//
//    Разрешить удаленное управление (TCP 135, 445):
//
//    Windows XP:
//    Открыть порт TCP 135 для локальной подсети.
//    Открытие порта TCP 445:
//    Если разрешено "Совместное использование файлов и принтеров", то
//    Открывать порт 445 не нужно, иначе - открыть.
//
//    Windows 7:
//    Предпочтительный способ:
//    Включить в оснастке брандмауэра исключения для "Удаленное управление Windows".
//    ИЛИ
//    Из комендной строки:
//    netsh advfirewall firewall set rule group="Удаленное управление Windows" new enable=Yes
//
// 3. Синхронизировать время на компьютерах.
//
// 4. Проверка функционирования доступа к WMI на локальном/удаленном компьютере:
//
//    WMIC = WMI командной строки (WMIC, WMI command-line).
//    Упрощенный интерфейс командной строки для работы с WMI.
//
//    Командный файл, следующего содержания:
//
//    rem Запрос: имя ОС сервера c помощью команды wmic:
//    wmic /node:"%1" os get name
//
//    Где:
//    %1 - Имя локального/удаленного компьютера.
*/


// Функция, позволяющая получить информацию об установленной Windows на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
Функция Computer_WindowsInfo(Computer = ".")
    Перем WINInfo, WINInfoOS;
    Перем WinMGMT, Win32_OperatingSystem, OperatingSystem;
    
    WINInfo = Новый ТаблицаЗначений;
    WINInfo.Колонки.Добавить("BootDevice");
    WINInfo.Колонки.Добавить("BuildNumber");
    WINInfo.Колонки.Добавить("BuildType");
    WINInfo.Колонки.Добавить("Caption");
    WINInfo.Колонки.Добавить("CodeSet");
    WINInfo.Колонки.Добавить("CountryCode");
    WINInfo.Колонки.Добавить("CreationClassName");
    WINInfo.Колонки.Добавить("CSCreationClassName");
    WINInfo.Колонки.Добавить("CSDVersion");
    WINInfo.Колонки.Добавить("CSName");
    WINInfo.Колонки.Добавить("CurrentTimeZone");
    WINInfo.Колонки.Добавить("DataExecutionPrevention_32BitApplications");
    WINInfo.Колонки.Добавить("DataExecutionPrevention_Available");
    WINInfo.Колонки.Добавить("DataExecutionPrevention_Drivers");
    WINInfo.Колонки.Добавить("DataExecutionPrevention_SupportPolicy");
    WINInfo.Колонки.Добавить("Debug");
    WINInfo.Колонки.Добавить("Description");
    WINInfo.Колонки.Добавить("Distributed");
    WINInfo.Колонки.Добавить("EncryptionLevel");
    WINInfo.Колонки.Добавить("ForegroundApplicationBoost");
    WINInfo.Колонки.Добавить("FreePhysicalMemory");
    WINInfo.Колонки.Добавить("FreeSpaceInPagingFiles");
    WINInfo.Колонки.Добавить("FreeVirtualMemory");
    WINInfo.Колонки.Добавить("InstallDate");
    WINInfo.Колонки.Добавить("LargeSystemCache");
    WINInfo.Колонки.Добавить("LastBootUpTime");
    WINInfo.Колонки.Добавить("LocalDateTime");
    WINInfo.Колонки.Добавить("Locale");
    WINInfo.Колонки.Добавить("Manufacturer");
    WINInfo.Колонки.Добавить("MaxNumberOfProcesses");
    WINInfo.Колонки.Добавить("MaxProcessMemorySize");
    WINInfo.Колонки.Добавить("MUILanguages");
    WINInfo.Колонки.Добавить("Name");
    WINInfo.Колонки.Добавить("NumberOfLicensedUsers");
    WINInfo.Колонки.Добавить("NumberOfProcesses");
    WINInfo.Колонки.Добавить("NumberOfUsers");
    WINInfo.Колонки.Добавить("OperatingSystemSKU");
    WINInfo.Колонки.Добавить("Organization");
    WINInfo.Колонки.Добавить("OSArchitecture");
    WINInfo.Колонки.Добавить("OSLanguage");
    WINInfo.Колонки.Добавить("OSProductSuite");
    WINInfo.Колонки.Добавить("OSType");
    WINInfo.Колонки.Добавить("OtherTypeDescription");
    WINInfo.Колонки.Добавить("PAEEnabled");
    WINInfo.Колонки.Добавить("PlusProductID");
    WINInfo.Колонки.Добавить("PlusVersionNumber");
    WINInfo.Колонки.Добавить("Primary");
    WINInfo.Колонки.Добавить("ProductType");
    WINInfo.Колонки.Добавить("RegisteredUser");
    WINInfo.Колонки.Добавить("SerialNumber");
    WINInfo.Колонки.Добавить("ServicePackMajorVersion");
    WINInfo.Колонки.Добавить("ServicePackMinorVersion");
    WINInfo.Колонки.Добавить("SizeStoredInPagingFiles");
    WINInfo.Колонки.Добавить("Status");
    WINInfo.Колонки.Добавить("SuiteMask");
    WINInfo.Колонки.Добавить("SystemDevice");
    WINInfo.Колонки.Добавить("SystemDirectory");
    WINInfo.Колонки.Добавить("SystemDrive");
    WINInfo.Колонки.Добавить("TotalSwapSpaceSize");
    WINInfo.Колонки.Добавить("TotalVirtualMemorySize");
    WINInfo.Колонки.Добавить("TotalVisibleMemorySize");
    WINInfo.Колонки.Добавить("Version");
    WINInfo.Колонки.Добавить("WindowsDirectory");
    
    Попытка
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_OperatingSystem = WinMGMT.ExecQuery("SELECT * FROM Win32_OperatingSystem");
    Исключение
        Возврат WINInfo;
    КонецПопытки;
    
    Для Каждого OperatingSystem ИЗ Win32_OperatingSystem Цикл
        WINInfoOS = WINInfo.Добавить();
        WINInfoOS.BootDevice = ПолучитьЗначениеВПопытке(OperatingSystem, "BootDevice");
        WINInfoOS.BuildNumber = ПолучитьЗначениеВПопытке(OperatingSystem, "BuildNumber");
        WINInfoOS.BuildType = ПолучитьЗначениеВПопытке(OperatingSystem, "BuildType");
        WINInfoOS.Caption = ПолучитьЗначениеВПопытке(OperatingSystem, "Caption");
        WINInfoOS.CodeSet = ПолучитьЗначениеВПопытке(OperatingSystem, "CodeSet");
        WINInfoOS.CountryCode = ПолучитьЗначениеВПопытке(OperatingSystem, "CountryCode");
        WINInfoOS.CreationClassName = ПолучитьЗначениеВПопытке(OperatingSystem, "CreationClassName");
        WINInfoOS.CSCreationClassName = ПолучитьЗначениеВПопытке(OperatingSystem, "CSCreationClassName");
        WINInfoOS.CSDVersion = ПолучитьЗначениеВПопытке(OperatingSystem, "CSDVersion");
        WINInfoOS.CSName = ПолучитьЗначениеВПопытке(OperatingSystem, "CSName");
        WINInfoOS.CurrentTimeZone = ПолучитьЗначениеВПопытке(OperatingSystem, "CurrentTimeZone");
        WINInfoOS.DataExecutionPrevention_32BitApplications = ПолучитьЗначениеВПопытке(OperatingSystem, "DataExecutionPrevention_32BitApplications");
        WINInfoOS.DataExecutionPrevention_Available = ПолучитьЗначениеВПопытке(OperatingSystem, "DataExecutionPrevention_Available");
        WINInfoOS.DataExecutionPrevention_Drivers = ПолучитьЗначениеВПопытке(OperatingSystem, "DataExecutionPrevention_Drivers");
        WINInfoOS.DataExecutionPrevention_SupportPolicy = ПолучитьЗначениеВПопытке(OperatingSystem, "DataExecutionPrevention_SupportPolicy");
        WINInfoOS.Debug = ПолучитьЗначениеВПопытке(OperatingSystem, "Debug");
        WINInfoOS.Description = ПолучитьЗначениеВПопытке(OperatingSystem, "Description");
        WINInfoOS.Distributed = ПолучитьЗначениеВПопытке(OperatingSystem, "Distributed");
        WINInfoOS.EncryptionLevel = ПолучитьЗначениеВПопытке(OperatingSystem, "EncryptionLevel");
        WINInfoOS.ForegroundApplicationBoost = ПолучитьЗначениеВПопытке(OperatingSystem, "ForegroundApplicationBoost");
        WINInfoOS.FreePhysicalMemory = ПолучитьЗначениеВПопытке(OperatingSystem, "FreePhysicalMemory");
        WINInfoOS.FreeSpaceInPagingFiles = ПолучитьЗначениеВПопытке(OperatingSystem, "FreeSpaceInPagingFiles");
        WINInfoOS.FreeVirtualMemory = ПолучитьЗначениеВПопытке(OperatingSystem, "FreeVirtualMemory");
        WINInfoOS.InstallDate = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(OperatingSystem, "InstallDate"));    // Дата установки Windows.
        WINInfoOS.LargeSystemCache = ПолучитьЗначениеВПопытке(OperatingSystem, "LargeSystemCache");
        WINInfoOS.LastBootUpTime = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(OperatingSystem, "LastBootUpTime"));
        WINInfoOS.LocalDateTime = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(OperatingSystem, "LocalDateTime"));
        WINInfoOS.Locale = ПолучитьЗначениеВПопытке(OperatingSystem, "Locale");
        WINInfoOS.Manufacturer = ПолучитьЗначениеВПопытке(OperatingSystem, "Manufacturer");
        WINInfoOS.MaxNumberOfProcesses = ПолучитьЗначениеВПопытке(OperatingSystem, "MaxNumberOfProcesses");
        WINInfoOS.MaxProcessMemorySize = ПреобразоватьЗначениеВЧисло(ПолучитьЗначениеВПопытке(OperatingSystem, "MaxProcessMemorySize"));
        MUILanguagesARRAY = ПолучитьЗначениеВПопытке(OperatingSystem, "MUILanguages");
        MUILanguages = Неопределено;
        Попытка
            Для Каждого ит ИЗ MUILanguagesARRAY Цикл
                MUILanguages = ит;
            КонецЦикла;
        Исключение
        КонецПопытки;
        WINInfoOS.MUILanguages = MUILanguages;
        WINInfoOS.Name = ПолучитьЗначениеВПопытке(OperatingSystem, "Name");
        WINInfoOS.NumberOfLicensedUsers = ПолучитьЗначениеВПопытке(OperatingSystem, "NumberOfLicensedUsers");
        WINInfoOS.NumberOfProcesses = ПолучитьЗначениеВПопытке(OperatingSystem, "NumberOfProcesses");
        WINInfoOS.NumberOfUsers = ПолучитьЗначениеВПопытке(OperatingSystem, "NumberOfUsers");
        WINInfoOS.OperatingSystemSKU = ПолучитьЗначениеВПопытке(OperatingSystem, "OperatingSystemSKU");
        WINInfoOS.Organization = ПолучитьЗначениеВПопытке(OperatingSystem, "Organization");
        WINInfoOS.OSArchitecture = ПолучитьЗначениеВПопытке(OperatingSystem, "OSArchitecture");
        WINInfoOS.OSLanguage = ПолучитьЗначениеВПопытке(OperatingSystem, "OSLanguage");
        WINInfoOS.OSProductSuite = ПолучитьЗначениеВПопытке(OperatingSystem, "OSProductSuite");
        WINInfoOS.OSType = ПолучитьЗначениеВПопытке(OperatingSystem, "OSType");
        WINInfoOS.OtherTypeDescription = ПолучитьЗначениеВПопытке(OperatingSystem, "OtherTypeDescription");
        WINInfoOS.PAEEnabled = ПолучитьЗначениеВПопытке(OperatingSystem, "PAEEnabled");
        WINInfoOS.PlusProductID = ПолучитьЗначениеВПопытке(OperatingSystem, "PlusProductID");
        WINInfoOS.PlusVersionNumber = ПолучитьЗначениеВПопытке(OperatingSystem, "PlusVersionNumber");
        WINInfoOS.Primary = ПолучитьЗначениеВПопытке(OperatingSystem, "Primary");
        WINInfoOS.ProductType = ПолучитьЗначениеВПопытке(OperatingSystem, "ProductType");
        WINInfoOS.RegisteredUser = ПолучитьЗначениеВПопытке(OperatingSystem, "RegisteredUser");
        WINInfoOS.SerialNumber = ПолучитьЗначениеВПопытке(OperatingSystem, "SerialNumber");
        WINInfoOS.ServicePackMajorVersion = ПолучитьЗначениеВПопытке(OperatingSystem, "ServicePackMajorVersion");
        WINInfoOS.ServicePackMinorVersion = ПолучитьЗначениеВПопытке(OperatingSystem, "ServicePackMinorVersion");
        WINInfoOS.SizeStoredInPagingFiles = ПолучитьЗначениеВПопытке(OperatingSystem, "SizeStoredInPagingFiles");
        WINInfoOS.Status = ПолучитьЗначениеВПопытке(OperatingSystem, "Status");
        WINInfoOS.SuiteMask = ПолучитьЗначениеВПопытке(OperatingSystem, "SuiteMask");
        WINInfoOS.SystemDevice = ПолучитьЗначениеВПопытке(OperatingSystem, "SystemDevice");
        WINInfoOS.SystemDirectory = ПолучитьЗначениеВПопытке(OperatingSystem, "SystemDirectory");
        WINInfoOS.SystemDrive = ПолучитьЗначениеВПопытке(OperatingSystem, "SystemDrive");
        WINInfoOS.TotalSwapSpaceSize = ПреобразоватьЗначениеВЧисло(ПолучитьЗначениеВПопытке(OperatingSystem, "TotalSwapSpaceSize"));
        WINInfoOS.TotalVirtualMemorySize = ПреобразоватьЗначениеВЧисло(ПолучитьЗначениеВПопытке(OperatingSystem, "TotalVirtualMemorySize"));
        WINInfoOS.TotalVisibleMemorySize = ПреобразоватьЗначениеВЧисло(ПолучитьЗначениеВПопытке(OperatingSystem, "TotalVisibleMemorySize"));
        WINInfoOS.Version = ПолучитьЗначениеВПопытке(OperatingSystem, "Version");
        WINInfoOS.WindowsDirectory = ПолучитьЗначениеВПопытке(OperatingSystem, "WindowsDirectory");
    КонецЦикла;

    Возврат WINInfo;
    
КонецФункции

Функция ПолучитьЗначениеВПопытке(хОбъект, хРеквизит)
    Попытка
        Возврат хОбъект[хРеквизит];
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    Возврат Неопределено;
КонецФункции

Функция ПреобразоватьЗначениеВДатуВремя(Значение)
    Попытка
        Возврат Дата(Лев(Значение,14));
    Исключение
        Возврат Дата("00010101");
    КонецПопытки;
    Возврат Дата("00010101");
КонецФункции

Функция ПреобразоватьЗначениеВЧисло(Значение)
    Попытка
        Возврат Число(Значение);
    Исключение
        Возврат 0;
    КонецПопытки;
    Возврат 0;
КонецФункции


// Процедура Имитация нажатия клавиш Ctrl+Shift+Z для закрытия окна сообщения типа "Контрольная точка №:...",
// сформированного в другой процедуре.
&НаКлиентеНаСервереБезКонтекста
Процедура SendKeys(KEYS_ENG = "^+z", KEYS_RUS = "^+я")
    
    Попытка
        WshShell = Новый COMОбъект("Wscript.Shell");
        WshShell.SendKeys(KEYS_ENG);    // для случая, если текущей является английская раскладка клавиатуры.
        WshShell.SendKeys(KEYS_RUS);    // для случая, если текущей является русская раскладка клавиатуры.
        
        // SendKeys(String) - имитируется нажатие клавиши или последовательности клавиш, указанных в параметре String.
        // В качестве параметра можно указывать как алфавитно-цифровые символы, так и символы специальных клавиш, например:
        // "Enter", "Tab", "F1", "Alt", "Shift", "Ctrl" и т.д.
        // Для указания клавиш "Alt", "Shift", "Ctrl" существуют специальные коды:
        // "Shift" - +;
        // "Ctrl" - ^;
        // "Alt" - %.
        // Если возникнет необходимость передать специальные символы именно как символы, а не команды,
        // нужно заключать их в фигурные скобки, например {+}.   
    Исключение
    КонецПопытки;

КонецПроцедуры


// Функция, возвращающая результат преобразования строкового значения даты в значение в формате даты.

Функция ПреобразоватьИзСтрокиВДату(СтрокаДаты)
    Попытка
        ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
        ScrptCtrl.Language="vbscript";
        OutDate = ScrptCtrl.Eval("CDate(""" + СтрокаДаты + """)");
        Возврат OutDate;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецФункции


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

Функция ВремяВМиллисекундах()
    Попытка
        Script = Новый COMОбъект("MSScriptControl.ScriptControl");
        Script.Language = "javascript";
        Script.Timeout   = -1;
        Время = Script.Eval("var d = new Date(); d.getTime()");
    Исключение
        Время = ТекущаяДата();
    КонецПопытки;
    
    Возврат Время;
КонецФункции

// Пример.
//
Процедура
ПримерИспользования()

   Начало = ВремяВМиллисекундах();
   КоличествоСтрок = 0;
   Для Каждого Элемент ИЗ Массив Цикл
         КоличествоСтрок = КоличествоСтрок  + 1;
         ...
   КонецЦикла;
   Конец  = ВремяВМиллисекундах();

   ВремяВыполнения = (Конец - Начало) / 1000;

   РезультСтрока = НСтр("ru = 'Результат процесса (количество строк = %КоличествоСтрок%, время выполнения = %ВремяВыполнения% с)'");
   РезультСтрока = СтрЗаменить(РезультСтрока, "%КоличествоСтрок%", Строка(КоличествоСтрок));
   РезультСтрока = СтрЗаменить(РезультСтрока, "%ВремяВыполнения%", Строка(ВремяВыполнения));

КонецПроцедуры


// Функция задержки выполнения процесса.
//
&НаКлиентеНаСервереБезКонтекста
Процедура ЗадержкаВВыполнении(ВремяОжидания)

   Попытка
      xPing = "ping -n 1 -w "+Формат(1000*ВремяОжидания, "ЧГ=0")+" 127.255.255.255";
      WshShell = Новый COMОбъект("WScript.Shell");
      WshShell.Run(xPing, 0, -1);
   Исключение
   КонецПопытки;
    
КонецПроцедуры


// Функция вызова оснастки установки системных Даты и Времени.
// Необходимы права Администратора/Опытного пользователя.
// ОС Windows.
//
&НаКлиентеНаСервереБезКонтекста

Функция SetDateTime()
    
    Попытка
        ShellApplication = Новый COMОбъект("Shell.Application");
        ShellApplication.SetTime();
    Исключение
    КонецПопытки;
    
КонецФункции


// Функция вызова оснастки Панели управления.
// Пример: Установка системных Даты и Времени.
// Необходимы права Администратора/Опытного пользователя.
// ОС Windows.
//
&НаКлиентеНаСервереБезКонтекста
Функция ControlPanelItem(Item = "timedate.cpl")
    
    Попытка
        ShellApplication = Новый COMОбъект("Shell.Application");
        // Открыть Панель управления:

        //ShellApplication.ControlPanelItem("");
        
        ShellApplication.ControlPanelItem(Item);
        
        // Приложения панели управления:

        // access.cpl - специальные возможности.
        // appwiz.cpl - установка и удаление программ.
        // desk.cpl - настройка экрана.
        // hdwwiz.cpl - мастер установки оборудования.
        // inetcpl.cpl - свойства обозревателя.
        // intl.cpl - язык и региональные стандарты.
        // joy.cpl - игровые устройства.
        // main.cpl - мышь.
        // mmsys.cpl - звуки и аудиоустройства.
        // ncpa.cpl - сетевые подключения.
        // nusrmgr.cpl - учётные записи пользователей.
        // odbccp32.cpl - настройка источников данных ODBC.
        // powercfg.cpl - управление электропитанием.
        // sysdm.cpl - свойства системы.
        // telephon.cpl - телефон и модем.
        // timedate.cpl - настройки времени и даты.

    Исключение
    КонецПопытки;
    
КонецФункции


// Функция, позволяющая получить Переменные окружения локального компьютера.
//
&НаКлиентеНаСервереБезКонтекста
Функция SystemEnvironment()
   

    ПеременныеОкружения = Новый Структура;
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WshSysEnv = WshShell.Environment("Process");

        // Имя компьютера.        ПеременныеОкружения.Вставить("COMPUTERNAME" , WshSysEnv.Item("COMPUTERNAME"));
        // Домен Windows компьютера.
        ПеременныеОкружения.Вставить("USERDOMAIN" , WshSysEnv.Item("USERDOMAIN"));
        // Имя контроллера домена, использовавшегося для авторизации текущего пользователя.
        ПеременныеОкружения.Вставить("LOGONSERVER" , WshSysEnv.Item("LOGONSERVER"));
        // Имя активного пользовательского сеанса.        // При локальном входе имеет значение "Console".
        // Ппри удаленном доступе имеет вид RDP-Tcp#НомерСеанса.
        ПеременныеОкружения.Вставить("SESSIONNAME" , WshSysEnv.Item("SESSIONNAME"));
        // Количество процессоров компьютера.
        ПеременныеОкружения.Вставить("NUMBER_OF_PROCESSORS" , WshSysEnv.Item("NUMBER_OF_PROCESSORS"));

        // Архитектура процессора. Возможные варианты: x86, IA64, AMD64.
        ПеременныеОкружения.Вставить("PROCESSOR_ARCHITECTURE" , WshSysEnv.Item("PROCESSOR_ARCHITECTURE"));

        // Описание процессора.
        ПеременныеОкружения.Вставить("PROCESSOR_IDENTIFIER" , WshSysEnv.Item("PROCESSOR_IDENTIFIER"));

        // Номер модели процессора.
        ПеременныеОкружения.Вставить("PROCESSOR_LEVEL" , WshSysEnv.Item("PROCESSOR_LEVEL"));

        // Ревизия процессора.
        ПеременныеОкружения.Вставить("PROCESSOR_REVISION" , WshSysEnv.Item("PROCESSOR_REVISION"));
        // Операционная Система.
        ПеременныеОкружения.Вставить("OS" , WshSysEnv.Item("OS"));

        // Каталог, в котором установлена Windows.
        ПеременныеОкружения.Вставить("WINDIR" , WshSysEnv.Item("WINDIR"));

        // Диск, на котором расположен корневой каталог Windows.
        ПеременныеОкружения.Вставить("SYSTEMDRIVE" , WshSysEnv.Item("SYSTEMDRIVE"));

        // Путь к корневому каталогу Windows.
        ПеременныеОкружения.Вставить("SYSTEMROOT" , WshSysEnv.Item("SYSTEMROOT"));

        // Каталог "Common Files" (обычно %ProgramFiles%\Common Files).
        ПеременныеОкружения.Вставить("COMMONPROGRAMFILES" , WshSysEnv.Item("COMMONPROGRAMFILES"));

        // Каталог "Common Files" в Program Files (x86).
        // Для 64-разрядной ОС (обычно %ProgramFiles(x86)%\Common Files).
        ПеременныеОкружения.Вставить("COMMONPROGRAMFILESx86" , WshSysEnv.Item("COMMONPROGRAMFILES(x86)"));

        // Командный интерпретатор Windows.
        ПеременныеОкружения.Вставить("COMSPEC" , WshSysEnv.Item("COMSPEC"));

        // Путь поиска исполняемых файлов.         ПеременныеОкружения.Вставить("PATH" , WshSysEnv.Item("PATH"));
        // Каталог временных файлов Windows TEMP.
        ПеременныеОкружения.Вставить("TEMP" , WshSysEnv.Item("TEMP"));

        // Каталог временных файлов Windows TMP.        ПеременныеОкружения.Вставить("TMP" , WshSysEnv.Item("TMP"));
        // В Windows 7 возвращает путь к каталогу C:\Users\Public.
        ПеременныеОкружения.Вставить("PUBLIC" , WshSysEnv.Item("PUBLIC"));

        // Каталог общих для всех пользователей документов и настроек.        ПеременныеОкружения.Вставить("ALLUSERSPROFILE" , WshSysEnv.Item("ALLUSERSPROFILE"));
         // Имя пользователя Windows.
        ПеременныеОкружения.Вставить("USERNAME" , WshSysEnv.Item("USERNAME"));

        // Путь к профилю текущего пользователя Windows.        ПеременныеОкружения.Вставить("USERPROFILE" , WshSysEnv.Item("USERPROFILE"));
        // Имя диска локальной рабочей станции, связанного с основным каталогом пользователя.
        ПеременныеОкружения.Вставить("HOMEDRIVE" , WshSysEnv.Item("HOMEDRIVE"));

        // Полный путь к основному каталогу пользователя основании основного каталога.        ПеременныеОкружения.Вставить("HOMEPATH" , WshSysEnv.Item("HOMEPATH"));
        // Сетевой путь к общему основному каталогу пользователя на основании основного каталога.        ПеременныеОкружения.Вставить("HOMESHARE" , WshSysEnv.Item("HOMESHARE"));.

    Исключение
    КонецПопытки;
    
    Возврат ПеременныеОкружения;
    
КонецФункции


// Функция, позволяющая информацию о материнской плате локального/удаленного компьютера.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Струтура:
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_Motherboard(Computer = ".")
    
    MotherboardInfo = Новый Структура("Height,Manufacturer,Model,Name,PartNumber,Product,SerialNumber,Version,Width");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_BaseBoard = WinMGMT.ExecQuery("SELECT * FROM Win32_BaseBoard");
        //Win32_BaseBoard = WinMGMT.ExecQuery("SELECT * FROM Win32_MotherboardDevice");
        
        Для Каждого BaseBoard ИЗ Win32_BaseBoard Цикл
            MotherboardInfo.Height = BaseBoard.Height;
            MotherboardInfo.Manufacturer = BaseBoard.Manufacturer;
            MotherboardInfo.Model = BaseBoard.Model;
            MotherboardInfo.Name = BaseBoard.Name;
            MotherboardInfo.Product = BaseBoard.Product;
            MotherboardInfo.SerialNumber = BaseBoard.SerialNumber;
            MotherboardInfo.Version = BaseBoard.Version;
            MotherboardInfo.Width = BaseBoard.Width;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат MotherboardInfo;
    
КонецФункции


// Функция, позволяющая информацию о BIOS локального/удаленного компьютера.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Струтура:
// Manufacturer, Name, SMBIOSBIOSVersion, ReleaseDate, Version, SerialNumber.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_BIOS(Computer = ".")
   
    BIOSInfo = Новый Структура("Manufacturer,Name,SMBIOSBIOSVersion,ReleaseDate,Version,SerialNumber");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        PrimaryBIOS = WinMGMT.ExecQuery("Select * from Win32_BIOS where PrimaryBIOS = true");
        
        Для Каждого BIOS ИЗ Prim
aryBIOS Цикл
            BIOSInfo.Manufacturer = BIOS.Manufacturer;
            BIOSInfo.Name = BIOS.Name;
            BIOSInfo.SMBIOSBIOSVersion = BIOS.SMBIOSBIOSVersion;
            BIOSInfo.ReleaseDate = Дата(Лев(BIOS.ReleaseDate,8));
            BIOSInfo.Version = BIOS.Version;
            BIOSInfo.SerialNumber = BIOS.SerialNumber;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат BIOSInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о процессоре(ах) на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_Processor(Computer = ".")
    
    Win32_ProcessorInfo = Новый ТаблицаЗначений;
    Win32_ProcessorInfo.Колонки.Добавить("AddressWidth");
    Win32_ProcessorInfo.Колонки.Добавить("Architecture");
    Win32_ProcessorInfo.Колонки.Добавить("Availability");
    Win32_ProcessorInfo.Колонки.Добавить("Caption");
    Win32_ProcessorInfo.Колонки.Добавить("ConfigManagerErrorCode");
    Win32_ProcessorInfo.Колонки.Добавить("ConfigManagerUserConfig");
    Win32_ProcessorInfo.Колонки.Добавить("CpuStatus");
    Win32_ProcessorInfo.Колонки.Добавить("CreationClassName");
    Win32_ProcessorInfo.Колонки.Добавить("CurrentClockSpeed");
    Win32_ProcessorInfo.Колонки.Добавить("CurrentVoltage");
    Win32_ProcessorInfo.Колонки.Добавить("DataWidth");
    Win32_ProcessorInfo.Колонки.Добавить("Description");
    Win32_ProcessorInfo.Колонки.Добавить("DeviceID");
    Win32_ProcessorInfo.Колонки.Добавить("ErrorCleared");
    Win32_ProcessorInfo.Колонки.Добавить("ErrorDescription");
    Win32_ProcessorInfo.Колонки.Добавить("ExtClock");
    Win32_ProcessorInfo.Колонки.Добавить("Family");
    Win32_ProcessorInfo.Колонки.Добавить("InstallDate");
    Win32_ProcessorInfo.Колонки.Добавить("L2CacheSize");
    Win32_ProcessorInfo.Колонки.Добавить("L2CacheSpeed");
    Win32_ProcessorInfo.Колонки.Добавить("L3CacheSize");
    Win32_ProcessorInfo.Колонки.Добавить("L3CacheSpeed");
    Win32_ProcessorInfo.Колонки.Добавить("LastErrorCode");
    Win32_ProcessorInfo.Колонки.Добавить("Level");
    Win32_ProcessorInfo.Колонки.Добавить("LoadPercentage");
    Win32_ProcessorInfo.Колонки.Добавить("Manufacturer");
    Win32_ProcessorInfo.Колонки.Добавить("MaxClockSpeed");
    Win32_ProcessorInfo.Колонки.Добавить("Name");
    Win32_ProcessorInfo.Колонки.Добавить("NumberOfCores");
    Win32_ProcessorInfo.Колонки.Добавить("NumberOfLogicalProcessors");
    Win32_ProcessorInfo.Колонки.Добавить("OtherFamilyDescription");
    Win32_ProcessorInfo.Колонки.Добавить("PNPDeviceID");
    Win32_ProcessorInfo.Колонки.Добавить("PowerManagementCapabilities");
    Win32_ProcessorInfo.Колонки.Добавить("PowerManagementSupported");
    Win32_ProcessorInfo.Колонки.Добавить("ProcessorId");
    Win32_ProcessorInfo.Колонки.Добавить("ProcessorType");
    Win32_ProcessorInfo.Колонки.Добавить("Revision");
    Win32_ProcessorInfo.Колонки.Добавить("Role");
    Win32_ProcessorInfo.Колонки.Добавить("SocketDesignation");
    Win32_ProcessorInfo.Колонки.Добавить("Status");
    Win32_ProcessorInfo.Колонки.Добавить("StatusInfo");
    Win32_ProcessorInfo.Колонки.Добавить("Stepping");
    Win32_ProcessorInfo.Колонки.Добавить("SystemCreationClassName");
    Win32_ProcessorInfo.Колонки.Добавить("SystemName");
    Win32_ProcessorInfo.Колонки.Добавить("UniqueId");
    Win32_ProcessorInfo.Колонки.Добавить("UpgradeMethod");
    Win32_ProcessorInfo.Колонки.Добавить("Version");
    Win32_ProcessorInfo.Колонки.Добавить("VoltageCaps");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Processor = WinMGMT.ExecQuery("SELECT * FROM Win32_Processor");
        
        Для Каждого Processor ИЗ Win32_Processor Цикл
            ProcessorInfo = Win32_ProcessorInfo.Добавить();
            ProcessorInfo.AddressWidth = Processor.AddressWidth;
            ProcessorInfo.Architecture = Processor.Architecture;
            ProcessorInfo.Availability = Processor.Availability;
            ProcessorInfo.Caption = Processor.Caption;
            ProcessorInfo.ConfigManagerErrorCode = Processor.ConfigManagerErrorCode;
            ProcessorInfo.ConfigManagerUserConfig = Processor.ConfigManagerUserConfig;
            ProcessorInfo.CpuStatus = Processor.CpuStatus;
            ProcessorInfo.CreationClassName = Processor.CreationClassName;
            ProcessorInfo.CurrentClockSpeed = Processor.CurrentClockSpeed;
            ProcessorInfo.CurrentVoltage = Processor.CurrentVoltage;
            ProcessorInfo.DataWidth = Processor.DataWidth;
            ProcessorInfo.Description = СокрЛП(Processor.Description);
            ProcessorInfo.DeviceID = Processor.DeviceID;
            ProcessorInfo.ErrorCleared = Processor.ErrorCleared;
            ProcessorInfo.ErrorDescription = Processor.ErrorDescription;
            ProcessorInfo.ExtClock = Processor.ExtClock;
            ProcessorInfo.Family = Processor.Family;
            ProcessorInfo.InstallDate = Processor.InstallDate;
            ProcessorInfo.L2CacheSize = Processor.L2CacheSize;
            ProcessorInfo.L2CacheSpeed = Processor.L2CacheSpeed;
            Попытка
                ProcessorInfo.L3CacheSize = Processor.L3CacheSize;
                ProcessorInfo.L3CacheSpeed = Processor.L3CacheSpeed;
            Исключение
            КонецПопытки;
            ProcessorInfo.LastErrorCode = Processor.LastErrorCode;
            ProcessorInfo.Level = Processor.Level;
            ProcessorInfo.LoadPercentage = Processor.LoadPercentage;
            ProcessorInfo.Manufacturer = Processor.Manufacturer;
            ProcessorInfo.MaxClockSpeed = Processor.MaxClockSpeed;
            ProcessorInfo.Name = СокрЛП(Processor.Name);
            Попытка
                ProcessorInfo.NumberOfCores = Processor.NumberOfCores;
                ProcessorInfo.NumberOfLogicalProcessors = Processor.NumberOfLogicalProcessors;
            Исключение
            КонецПопытки;
            ProcessorInfo.OtherFamilyDescription = Processor.OtherFamilyDescription;
            ProcessorInfo.PNPDeviceID = Processor.PNPDeviceID;
            ProcessorInfo.PowerManagementCapabilities = Processor.PowerManagementCapabilities;
            ProcessorInfo.PowerManagementSupported = Processor.PowerManagementSupported;
            ProcessorInfo.ProcessorId = Processor.ProcessorId;
            ProcessorInfo.ProcessorType = Processor.ProcessorType;
            ProcessorInfo.Revision = Processor.Revision;
            ProcessorInfo.Role = Processor.Role;
            ProcessorInfo.SocketDesignation = Processor.SocketDesignation;
            ProcessorInfo.Status = Processor.Status;
            ProcessorInfo.StatusInfo = Processor.StatusInfo;
            ProcessorInfo.Stepping = Processor.Stepping;
            ProcessorInfo.SystemCreationClassName = Processor.SystemCreationClassName;
            ProcessorInfo.SystemName = Processor.SystemName;
            ProcessorInfo.UniqueId = Processor.UniqueId;
            ProcessorInfo.UpgradeMethod = Processor.UpgradeMethod;
            ProcessorInfo.Version = Processor.Version;
            ProcessorInfo.VoltageCaps = Processor.VoltageCaps;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_ProcessorInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о памяти на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_RAM(Computer = ".")
    
    RAMInfo = Новый Структура("AvailableVirtualMemory,Caption,Description,Name,SettingID,TotalPageFileSpace,TotalPhysicalMemory,TotalVirtualMemory");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_LogicalMemoryConfiguration = WinMGMT.ExecQuery("SELECT * FROM Win32_LogicalMemoryConfiguration");
        
        Для Каждого LogicalMemoryConfiguration ИЗ Win32_LogicalMemoryConfiguration Цикл
            RAMInfo.AvailableVirtualMemory = LogicalMemoryConfiguration.AvailableVirtualMemory;
            RAMInfo.Caption = LogicalMemoryConfiguration.Caption;
            RAMInfo.Description = LogicalMemoryConfiguration.Description;
            RAMInfo.Name = LogicalMemoryConfiguration.Name;
            RAMInfo.SettingID = LogicalMemoryConfiguration.SettingID;
            RAMInfo.TotalPageFileSpace = LogicalMemoryConfiguration.TotalPageFileSpace;
            RAMInfo.TotalPhysicalMemory = LogicalMemoryConfiguration.TotalPhysicalMemory;
            RAMInfo.TotalVirtualMemory = LogicalMemoryConfiguration.TotalVirtualMemory;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат RAMInfo;
    
КонецФункции


// Функция, позволяющая получить информацию об объеме установленной памяти на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_TotalPhysicalMemory(Computer = ".")
    
    PhysicalMemoryInfo = Новый Структура;
    PhysicalMemoryInfo.Вставить("Name");
    PhysicalMemoryInfo.Вставить("TotalPhysicalMemory");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_TotalPhysicalMemory = WinMGMT.ExecQuery("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
        
        Для Каждого PhysicalMemory ИЗ Win32_TotalPhysicalMemory Цикл
            PhysicalMemoryInfo.Name = PhysicalMemory.Name;
            PhysicalMemoryInfo.TotalPhysicalMemory = PhysicalMemory.TotalPhysicalMemory;
            Прервать;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат PhysicalMemoryInfo;
    
КонецФункции

 


// Функция, позволяющая получить информацию о физической памяти на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
Функция Computer_PhysicalMemory(Computer = ".")
    Перем WinMGMT;
    Перем Win32_PhysicalMemory, PhysicalMemory;
    Перем PhysicalMemoryInfo, PHMemory;
    
    PhysicalMemoryInfo = Новый ТаблицаЗначений;
    PhysicalMemoryInfo.Колонки.Добавить("BankLabel");
    PhysicalMemoryInfo.Колонки.Добавить("Capacity");
    PhysicalMemoryInfo.Колонки.Добавить("Caption");
    PhysicalMemoryInfo.Колонки.Добавить("CreationClassName");
    PhysicalMemoryInfo.Колонки.Добавить("DataWidth");
    PhysicalMemoryInfo.Колонки.Добавить("Description");
    PhysicalMemoryInfo.Колонки.Добавить("DeviceLocator");
    PhysicalMemoryInfo.Колонки.Добавить("FormFactor");
    PhysicalMemoryInfo.Колонки.Добавить("HotSwappable");
    PhysicalMemoryInfo.Колонки.Добавить("InstallDate");
    PhysicalMemoryInfo.Колонки.Добавить("InterleaveDataDepth");
    PhysicalMemoryInfo.Колонки.Добавить("InterleavePosition");
    PhysicalMemoryInfo.Колонки.Добавить("Manufacturer");
    PhysicalMemoryInfo.Колонки.Добавить("MemoryType");
    PhysicalMemoryInfo.Колонки.Добавить("Model");
    PhysicalMemoryInfo.Колонки.Добавить("Name");
    PhysicalMemoryInfo.Колонки.Добавить("OtherIdentifyingInfo");
    PhysicalMemoryInfo.Колонки.Добавить("PartNumber");
    PhysicalMemoryInfo.Колонки.Добавить("PositionInRow");
    PhysicalMemoryInfo.Колонки.Добавить("PoweredOn");
    PhysicalMemoryInfo.Колонки.Добавить("Removable");
    PhysicalMemoryInfo.Колонки.Добавить("Replaceable");
    PhysicalMemoryInfo.Колонки.Добавить("SerialNumber");
    PhysicalMemoryInfo.Колонки.Добавить("SKU");
    PhysicalMemoryInfo.Колонки.Добавить("Speed");
    PhysicalMemoryInfo.Колонки.Добавить("Status");
    PhysicalMemoryInfo.Колонки.Добавить("Tag");
    PhysicalMemoryInfo.Колонки.Добавить("TotalWidth");
    PhysicalMemoryInfo.Колонки.Добавить("TypeDetail");
    PhysicalMemoryInfo.Колонки.Добавить("Version");
    
    Попытка
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_PhysicalMemory = WinMGMT.ExecQuery("SELECT * FROM Win32_PhysicalMemory");
    Исключение
        Возврат PhysicalMemoryInfo;
    КонецПопытки;
    
    Для Каждого PhysicalMemory ИЗ Win32_PhysicalMemory Цикл
        PHMemory = PhysicalMemoryInfo.Добавить();
        PHMemory.BankLabel = ПолучитьЗначениеВПопытке(PhysicalMemory, "BankLabel");
        PHMemory.Capacity = ПреобразоватьЗначениеВЧисло(ПолучитьЗначениеВПопытке(PhysicalMemory, "Capacity"));
        PHMemory.Capacity = PHMemory.Capacity/1024/1024;
        PHMemory.Caption = ПолучитьЗначениеВПопытке(PhysicalMemory, "Caption");
        PHMemory.CreationClassName = ПолучитьЗначениеВПопытке(PhysicalMemory, "CreationClassName");
        PHMemory.DataWidth = ПолучитьЗначениеВПопытке(PhysicalMemory, "DataWidth");
        PHMemory.Description = ПолучитьЗначениеВПопытке(PhysicalMemory, "Description");
        PHMemory.DeviceLocator = ПолучитьЗначениеВПопытке(PhysicalMemory, "DeviceLocator");
        PHMemory.FormFactor = ПолучитьЗначениеВПопытке(PhysicalMemory, "FormFactor");
        PHMemory.HotSwappable = ПолучитьЗначениеВПопытке(PhysicalMemory, "HotSwappable");
        PHMemory.InstallDate = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(PhysicalMemory, "InstallDate"));
        PHMemory.InterleaveDataDepth = ПолучитьЗначениеВПопытке(PhysicalMemory, "InterleaveDataDepth");
        PHMemory.InterleavePosition = ПолучитьЗначениеВПопытке(PhysicalMemory, "InterleavePosition");
        PHMemory.Manufacturer = ПолучитьЗначениеВПопытке(PhysicalMemory, "Manufacturer");
        PHMemory.MemoryType = ПолучитьЗначениеВПопытке(PhysicalMemory, "MemoryType");
        PHMemory.Model = ПолучитьЗначениеВПопытке(PhysicalMemory, "Model");
        PHMemory.Name = ПолучитьЗначениеВПопытке(PhysicalMemory, "Name");
        PHMemory.OtherIdentifyingInfo = ПолучитьЗначениеВПопытке(PhysicalMemory, "OtherIdentifyingInfo");
        PHMemory.PartNumber = ПолучитьЗначениеВПопытке(PhysicalMemory, "PartNumber");
        PHMemory.PositionInRow = ПолучитьЗначениеВПопытке(PhysicalMemory, "PositionInRow");
        PHMemory.PoweredOn = ПолучитьЗначениеВПопытке(PhysicalMemory, "PoweredOn");
        PHMemory.Removable = ПолучитьЗначениеВПопытке(PhysicalMemory, "Removable");
        PHMemory.Replaceable = ПолучитьЗначениеВПопытке(PhysicalMemory, "Replaceable");
        PHMemory.SerialNumber = ПолучитьЗначениеВПопытке(PhysicalMemory, "SerialNumber");
        PHMemory.SKU = ПолучитьЗначениеВПопытке(PhysicalMemory, "SKU");
        PHMemory.Speed = ПолучитьЗначениеВПопытке(PhysicalMemory, "Speed");
        PHMemory.Status = ПолучитьЗначениеВПопытке(PhysicalMemory, "Status");
        PHMemory.Tag = ПолучитьЗначениеВПопытке(PhysicalMemory, "Tag");
        PHMemory.TotalWidth = ПолучитьЗначениеВПопытке(PhysicalMemory, "TotalWidth");
        PHMemory.TypeDetail = ПолучитьЗначениеВПопытке(PhysicalMemory, "TypeDetail");
        PHMemory.Version = ПолучитьЗначениеВПопытке(PhysicalMemory, "Version");
    КонецЦикла;

    Возврат PhysicalMemoryInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о виртуальной памяти на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_VirtualMemory(Computer = ".")
    
    VirtualMemoryInfo = Новый ТаблицаЗначений;
    VirtualMemoryInfo.Колонки.Добавить("AllocatedBaseSize");
    VirtualMemoryInfo.Колонки.Добавить("Caption");
    VirtualMemoryInfo.Колонки.Добавить("CurrentUsage");
    VirtualMemoryInfo.Колонки.Добавить("Description");
    VirtualMemoryInfo.Колонки.Добавить("InstallDate");
    VirtualMemoryInfo.Колонки.Добавить("Name");
    VirtualMemoryInfo.Колонки.Добавить("PeakUsage");
    VirtualMemoryInfo.Колонки.Добавить("Status");
    VirtualMemoryInfo.Колонки.Добавить("TempPageFile");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_PageFileUsage = WinMGMT.ExecQuery("SELECT * FROM Win32_PageFileUsage");
        
        Для Каждого PageFileUsage ИЗ Win32_PageFileUsage Цикл
            PageFileUsageInfo = VirtualMemoryInfo.Добавить();
            PageFileUsageInfo.AllocatedBaseSize = PageFileUsage.AllocatedBaseSize;
            PageFileUsageInfo.Caption = PageFileUsage.Caption;
            PageFileUsageInfo.CurrentUsage = PageFileUsage.CurrentUsage;
            PageFileUsageInfo.Description = PageFileUsage.Description;
            PageFileUsageInfo.InstallDate = Дата(Лев(PageFileUsage.InstallDate,14));
            PageFileUsageInfo.Name = PageFileUsage.Name;
            PageFileUsageInfo.PeakUsage = PageFileUsage.PeakUsage;
            PageFileUsageInfo.Status = PageFileUsage.Status;
            PageFileUsageInfo.TempPageFile = PageFileUsage.TempPageFile;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат VirtualMemoryInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о видео на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_Video(Computer = ".")
    
    Win32_VideoControllerInfo = Новый ТаблицаЗначений;
    Win32_VideoControllerInfo.Колонки.Добавить("AcceleratorCapabilities");
    Win32_VideoControllerInfo.Колонки.Добавить("AdapterCompatibility");
    Win32_VideoControllerInfo.Колонки.Добавить("AdapterDACType");
    Win32_VideoControllerInfo.Колонки.Добавить("AdapterRAM");
    Win32_VideoControllerInfo.Колонки.Добавить("Availability");
    Win32_VideoControllerInfo.Колонки.Добавить("CapabilityDescriptions");
    Win32_VideoControllerInfo.Колонки.Добавить("Caption");
    Win32_VideoControllerInfo.Колонки.Добавить("ColorTableEntries");
    Win32_VideoControllerInfo.Колонки.Добавить("ConfigManagerErrorCode");
    Win32_VideoControllerInfo.Колонки.Добавить("ConfigManagerUserConfig");
    Win32_VideoControllerInfo.Колонки.Добавить("CreationClassName");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentBitsPerPixel");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentHorizontalResolution");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentNumberOfColors");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentNumberOfColumns");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentNumberOfRows");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentRefreshRate");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentScanMode");
    Win32_VideoControllerInfo.Колонки.Добавить("CurrentVerticalResolution");
    Win32_VideoControllerInfo.Колонки.Добавить("Description");
    Win32_VideoControllerInfo.Колонки.Добавить("DeviceID");
    Win32_VideoControllerInfo.Колонки.Добавить("DeviceSpecificPens");
    Win32_VideoControllerInfo.Колонки.Добавить("DitherType");
    Win32_VideoControllerInfo.Колонки.Добавить("DriverDate");
    Win32_VideoControllerInfo.Колонки.Добавить("DriverVersion");
    Win32_VideoControllerInfo.Колонки.Добавить("ErrorCleared");
    Win32_VideoControllerInfo.Колонки.Добавить("ErrorDescription");
    Win32_VideoControllerInfo.Колонки.Добавить("ICMIntent");
    Win32_VideoControllerInfo.Колонки.Добавить("ICMMethod");
    Win32_VideoControllerInfo.Колонки.Добавить("InfFilename");
    Win32_VideoControllerInfo.Колонки.Добавить("InfSection");
    Win32_VideoControllerInfo.Колонки.Добавить("InstallDate");
    Win32_VideoControllerInfo.Колонки.Добавить("InstalledDisplayDrivers");
    Win32_VideoControllerInfo.Колонки.Добавить("LastErrorCode");
    Win32_VideoControllerInfo.Колонки.Добавить("MaxMemorySupported");
    Win32_VideoControllerInfo.Колонки.Добавить("MaxNumberControlled");
    Win32_VideoControllerInfo.Колонки.Добавить("MaxRefreshRate");
    Win32_VideoControllerInfo.Колонки.Добавить("MinRefreshRate");
    Win32_VideoControllerInfo.Колонки.Добавить("Monochrome");
    Win32_VideoControllerInfo.Колонки.Добавить("Name");
    Win32_VideoControllerInfo.Колонки.Добавить("NumberOfColorPlanes");
    Win32_VideoControllerInfo.Колонки.Добавить("NumberOfVideoPages");
    Win32_VideoControllerInfo.Колонки.Добавить("PNPDeviceID");
    Win32_VideoControllerInfo.Колонки.Добавить("PowerManagementCapabilities");
    Win32_VideoControllerInfo.Колонки.Добавить("PowerManagementSupported");
    Win32_VideoControllerInfo.Колонки.Добавить("ProtocolSupported");
    Win32_VideoControllerInfo.Колонки.Добавить("ReservedSystemPaletteEntries");
    Win32_VideoControllerInfo.Колонки.Добавить("SpecificationVersion");
    Win32_VideoControllerInfo.Колонки.Добавить("Status");
    Win32_VideoControllerInfo.Колонки.Добавить("StatusInfo");
    Win32_VideoControllerInfo.Колонки.Добавить("SystemCreationClassName");
    Win32_VideoControllerInfo.Колонки.Добавить("SystemName");
    Win32_VideoControllerInfo.Колонки.Добавить("SystemPaletteEntries");
    Win32_VideoControllerInfo.Колонки.Добавить("TimeOfLastReset");
    Win32_VideoControllerInfo.Колонки.Добавить("VideoArchitecture");
    Win32_VideoControllerInfo.Колонки.Добавить("VideoMemoryType");
    Win32_VideoControllerInfo.Колонки.Добавить("VideoMode");
    Win32_VideoControllerInfo.Колонки.Добавить("VideoModeDescription");
    Win32_VideoControllerInfo.Колонки.Добавить("VideoProcessor");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_VideoController = WinMGMT.ExecQuery("SELECT * FROM Win32_VideoController");
        
        Для Каждого VideoController ИЗ Win32_VideoController Цикл
            VideoControllerInfo = Win32_VideoControllerInfo.Добавить();
            VideoControllerInfo.AcceleratorCapabilities = VideoController.AcceleratorCapabilities;
            VideoControllerInfo.AdapterCompatibility = VideoController.AdapterCompatibility;
            VideoControllerInfo.AdapterDACType = VideoController.AdapterDACType;
            VideoControllerInfo.AdapterRAM = VideoController.AdapterRAM;
            VideoControllerInfo.Availability = VideoController.Availability;
            VideoControllerInfo.CapabilityDescriptions = VideoController.CapabilityDescriptions;
            VideoControllerInfo.Caption = VideoController.Caption;
            VideoControllerInfo.ColorTableEntries = VideoController.ColorTableEntries;
            VideoControllerInfo.ConfigManagerErrorCode = VideoController.ConfigManagerErrorCode;
            VideoControllerInfo.ConfigManagerUserConfig = VideoController.ConfigManagerUserConfig;
            VideoControllerInfo.CreationClassName = VideoController.CreationClassName;
            VideoControllerInfo.CurrentBitsPerPixel = VideoController.CurrentBitsPerPixel;
            VideoControllerInfo.CurrentHorizontalResolution = VideoController.CurrentHorizontalResolution;
            VideoControllerInfo.CurrentNumberOfColors = VideoController.CurrentNumberOfColors;
            VideoControllerInfo.CurrentNumberOfColumns = VideoController.CurrentNumberOfColumns;
            VideoControllerInfo.CurrentNumberOfRows = VideoController.CurrentNumberOfRows;
            VideoControllerInfo.CurrentRefreshRate = VideoController.CurrentRefreshRate;
            VideoControllerInfo.CurrentScanMode = VideoController.CurrentScanMode;
            VideoControllerInfo.CurrentVerticalResolution = VideoController.CurrentVerticalResolution;
            VideoControllerInfo.Description = VideoController.Description;
            VideoControllerInfo.DeviceID = VideoController.DeviceID;
            VideoControllerInfo.DeviceSpecificPens = VideoController.DeviceSpecificPens;
            VideoControllerInfo.DitherType = VideoController.DitherType;
            VideoControllerInfo.DriverDate = VideoController.DriverDate;
            VideoControllerInfo.DriverVersion = VideoController.DriverVersion;
            VideoControllerInfo.ErrorCleared = VideoController.ErrorCleared;
            VideoControllerInfo.ErrorDescription = VideoController.ErrorDescription;
            VideoControllerInfo.ICMIntent = VideoController.ICMIntent;
            VideoControllerInfo.ICMMethod = VideoController.ICMMethod;
            VideoControllerInfo.InfFilename = VideoController.InfFilename;
            VideoControllerInfo.InfSection = VideoController.InfSection;
            VideoControllerInfo.InstallDate = VideoController.InstallDate;
            VideoControllerInfo.InstalledDisplayDrivers = VideoController.InstalledDisplayDrivers;
            VideoControllerInfo.LastErrorCode = VideoController.LastErrorCode;
            VideoControllerInfo.MaxMemorySupported = VideoController.MaxMemorySupported;
            VideoControllerInfo.MaxNumberControlled = VideoController.MaxNumberControlled;
            VideoControllerInfo.MaxRefreshRate = VideoController.MaxRefreshRate;
            VideoControllerInfo.MinRefreshRate = VideoController.MinRefreshRate;
            VideoControllerInfo.Monochrome = VideoController.Monochrome;
            VideoControllerInfo.Name = VideoController.Name;
            VideoControllerInfo.NumberOfColorPlanes = VideoController.NumberOfColorPlanes;
            VideoControllerInfo.NumberOfVideoPages = VideoController.NumberOfVideoPages;
            VideoControllerInfo.PNPDeviceID = VideoController.PNPDeviceID;
            VideoControllerInfo.PowerManagementCapabilities = VideoController.PowerManagementCapabilities;
            VideoControllerInfo.PowerManagementSupported = VideoController.PowerManagementSupported;
            VideoControllerInfo.ProtocolSupported = VideoController.ProtocolSupported;
            VideoControllerInfo.ReservedSystemPaletteEntries = VideoController.ReservedSystemPaletteEntries;
            VideoControllerInfo.SpecificationVersion = VideoController.SpecificationVersion;
            VideoControllerInfo.Status = VideoController.Status;
            VideoControllerInfo.StatusInfo = VideoController.StatusInfo;
            VideoControllerInfo.SystemCreationClassName = VideoController.SystemCreationClassName;
            VideoControllerInfo.SystemName = VideoController.SystemName;
            VideoControllerInfo.SystemPaletteEntries = VideoController.SystemPaletteEntries;
            VideoControllerInfo.TimeOfLastReset = VideoController.TimeOfLastReset;
            VideoControllerInfo.VideoArchitecture = VideoController.VideoArchitecture;
            VideoControllerInfo.VideoMemoryType = VideoController.VideoMemoryType;
            VideoControllerInfo.VideoMode = VideoController.VideoMode;
            VideoControllerInfo.VideoModeDescription = VideoController.VideoModeDescription;
            VideoControllerInfo.VideoProcessor = VideoController.VideoProcessor;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_VideoControllerInfo;
    
КонецФункции

 


// Функция, позволяющая получить информацию о мониторе(ах) на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
Функция Computer_Monitor(Computer = ".")
    Перем WinMGMT;
    Перем Win32_DesktopMonitor, Monitor, MonitorInfo;
    Перем Win32_DesktopMonitorInfo;
    
    Win32_DesktopMonitorInfo = Новый ТаблицаЗначений;
    Win32_DesktopMonitorInfo.Колонки.Добавить("Availability");
    Win32_DesktopMonitorInfo.Колонки.Добавить("Bandwidth");
    Win32_DesktopMonitorInfo.Колонки.Добавить("Caption");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ConfigManagerErrorCode");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ConfigManagerUserConfig");
    Win32_DesktopMonitorInfo.Колонки.Добавить("CreationClassName");
    Win32_DesktopMonitorInfo.Колонки.Добавить("Description");
    Win32_DesktopMonitorInfo.Колонки.Добавить("DeviceID");
    Win32_DesktopMonitorInfo.Колонки.Добавить("DisplayType");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ErrorCleared");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ErrorDescription");
    Win32_DesktopMonitorInfo.Колонки.Добавить("InstallDate");
    Win32_DesktopMonitorInfo.Колонки.Добавить("IsLocked");
    Win32_DesktopMonitorInfo.Колонки.Добавить("LastErrorCode");
    Win32_DesktopMonitorInfo.Колонки.Добавить("MonitorManufacturer");
    Win32_DesktopMonitorInfo.Колонки.Добавить("MonitorType");
    Win32_DesktopMonitorInfo.Колонки.Добавить("Name");
    Win32_DesktopMonitorInfo.Колонки.Добавить("PixelsPerXLogicalInch");
    Win32_DesktopMonitorInfo.Колонки.Добавить("PixelsPerYLogicalInch");
    Win32_DesktopMonitorInfo.Колонки.Добавить("PNPDeviceID");
    Win32_DesktopMonitorInfo.Колонки.Добавить("PowerManagementCapabilities");
    Win32_DesktopMonitorInfo.Колонки.Добавить("PowerManagementSupported");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ScreenHeight");
    Win32_DesktopMonitorInfo.Колонки.Добавить("ScreenWidth");
    Win32_DesktopMonitorInfo.Колонки.Добавить("Status");
    Win32_DesktopMonitorInfo.Колонки.Добавить("StatusInfo");
    Win32_DesktopMonitorInfo.Колонки.Добавить("SystemCreationClassName");
    Win32_DesktopMonitorInfo.Колонки.Добавить("SystemName");

    Попытка
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_DesktopMonitor = WinMGMT.ExecQuery("SELECT * FROM Win32_DesktopMonitor");
    Исключение
        Возврат Win32_DesktopMonitorInfo;
    КонецПопытки;
    
    Для Каждого Monitor ИЗ Win32_DesktopMonitor Цикл
        MonitorInfo = Win32_DesktopMonitorInfo.Добавить();
        MonitorInfo.Availability = ПолучитьЗначениеВПопытке(Monitor, "Availability");
        MonitorInfo.Bandwidth = ПолучитьЗначениеВПопытке(Monitor, "Bandwidth");
        MonitorInfo.Caption = ПолучитьЗначениеВПопытке(Monitor, "Caption");
        MonitorInfo.ConfigManagerErrorCode = ПолучитьЗначениеВПопытке(Monitor, "ConfigManagerErrorCode");
        MonitorInfo.ConfigManagerUserConfig = ПолучитьЗначениеВПопытке(Monitor, "ConfigManagerUserConfig");
        MonitorInfo.CreationClassName = ПолучитьЗначениеВПопытке(Monitor, "CreationClassName");
        MonitorInfo.Description = ПолучитьЗначениеВПопытке(Monitor, "Description");
        MonitorInfo.DeviceID = ПолучитьЗначениеВПопытке(Monitor, "DeviceID");
        MonitorInfo.DisplayType = ПолучитьЗначениеВПопытке(Monitor, "DisplayType");
        MonitorInfo.ErrorCleared = ПолучитьЗначениеВПопытке(Monitor, "ErrorCleared");
        MonitorInfo.ErrorDescription = ПолучитьЗначениеВПопытке(Monitor, "ErrorDescription");
        MonitorInfo.InstallDate = ПолучитьЗначениеВПопытке(Monitor, "InstallDate");
        MonitorInfo.IsLocked = ПолучитьЗначениеВПопытке(Monitor, "IsLocked");
        MonitorInfo.LastErrorCode = ПолучитьЗначениеВПопытке(Monitor, "LastErrorCode");
        MonitorInfo.MonitorManufacturer = ПолучитьЗначениеВПопытке(Monitor, "MonitorManufacturer");
        MonitorInfo.MonitorType = ПолучитьЗначениеВПопытке(Monitor, "MonitorType");
        MonitorInfo.Name = ПолучитьЗначениеВПопытке(Monitor, "Name");
        MonitorInfo.PixelsPerXLogicalInch = ПолучитьЗначениеВПопытке(Monitor, "PixelsPerXLogicalInch");
        MonitorInfo.PixelsPerYLogicalInch = ПолучитьЗначениеВПопытке(Monitor, "PixelsPerYLogicalInch");
        MonitorInfo.PNPDeviceID = ПолучитьЗначениеВПопытке(Monitor, "PNPDeviceID");
        MonitorInfo.PowerManagementCapabilities = ПолучитьЗначениеВПопытке(Monitor, "PowerManagementCapabilities");
        MonitorInfo.PowerManagementSupported = ПолучитьЗначениеВПопытке(Monitor, "PowerManagementSupported");
        MonitorInfo.ScreenHeight = ПолучитьЗначениеВПопытке(Monitor, "ScreenHeight");
        MonitorInfo.ScreenWidth = ПолучитьЗначениеВПопытке(Monitor, "ScreenWidth");
        MonitorInfo.Status = ПолучитьЗначениеВПопытке(Monitor, "Status");
        MonitorInfo.StatusInfo = ПолучитьЗначениеВПопытке(Monitor, "StatusInfo");
        MonitorInfo.SystemCreationClassName = ПолучитьЗначениеВПопытке(Monitor, "SystemCreationClassName");
        MonitorInfo.SystemName = ПолучитьЗначениеВПопытке(Monitor, "SystemName");
    КонецЦикла;
    
    Возврат Win32_DesktopMonitorInfo;
    
КонецФункции


// Функция, позволяющая получить список подключенных принтеров локального/удаленного компьютера,
// в т.ч. и предоставленных в общее пользование.
// Параметры:
//    Computer - Имя компьютера, список принтеров которого необходимо получить.
// Возвращаемое значение:
//    TPrinters - Таблица значений.
//    Колонки:
//        Computer - Имя компьюьера, на котором установлен(ы) прентер(а).
//        LocalName- Локальное имя принтера на компьютере.
//        Shared     - Общий/Локальный.
//        ShareName- Имя принтера для общего доступа.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//

&НаСервереБезКонтекста
Функция Computer_Printer(Computer = ".")
    
    TPrinters = Новый ТаблицаЗначений;
    TPrinters.Колонки.Добавить("Computer");
    TPrinters.Колонки.Добавить("LocalName");
    TPrinters.Колонки.Добавить("Shared");
    TPrinters.Колонки.Добавить("ShareName");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Printers = WinMGMT.ExecQuery("Select * from Win32_Printer");
        
        Для Каждого Printer ИЗ Printers Цикл
            НоваяСтрока = TPrinters.Добавить();
            НоваяСтрока.Computer = Printer.SystemName;
            НоваяСтрока.LocalName = Printer.Name;
            НоваяСтрока.Shared = Printer.Shared;
            Если Printer.Shared Тогда
                НоваяСтрока.ShareName = Printer.ShareName;
            КонецЕсли;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат TPrinters;
    
КонецФункции


// Процедура подключения сетевого принтера.
//
&НаКлиентеНаСервереБезКонтекста
Процедура Network_Printer(ИмяСервера, ИмяПринтера)
    
    Network = Новый COMobject("Wscript.Network");
    
    Попытка
        
// Установка принтера
        Network.AddWindowsPrinterConnection("\\"+ИмяСервера+"\"+ИмяПринтера);
        // Принтер по-умолчанию
        Network.SetDefaultPrinter("\\"+ИмяСервера+"\"+ИмяПринтера);
    Исключение
        Сообщить("Невозможно произвести подключение принтера.");
    КонецПопытки;
    
КонецПроцедуры


// Функция, позволяющая получить Имя пользователя, зарегистрировавшегося на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    DomainName(ComputerName)\UserName - Имя пользователя.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция User_ComputerSystem(Computer = ".")

    UserComputer = "";
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        ComputerSystem = WinMGMT.ExecQuery("SELECT * FROM Win32_ComputerSystem");
        
        Для Каждого System ИЗ ComputerSystem Цикл
            Возврат System.UserName;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат UserComputer;
    
КонецФункции


// Функция, позволяющая получить локальные имена: Компьютера, Пользователя, Домена.
//
&НаКлиентеНаСервереБезКонтекста
Функция GET_ComputerName_UserName_UserDomain()
    
    C_U_D = Новый Структура;
    
   Попытка
      Network = Новый COMobject("Wscript.Network");

      C_U_D.Вставить("ComputerName", Network.ComputerName);
      C_U_D.Вставить("UserName", Network.UserName);
      C_U_D.Вставить("UserDomain", Network.UserDomain);
   Исключение
   КонецПопытки;
    

    Возврат C_U_D;
    
КонецФункции


// Функция, позволяющая получить список учётных записей на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_UserList(Computer = ".", АдминистраторПоУмолчанию, ГруппыИПользователи)
    
    Win32_UserAccountInfo = Новый ТаблицаЗначений;
    Win32_UserAccountInfo.Колонки.Добавить("AccountType");
    Win32_UserAccountInfo.Колонки.Добавить("Caption");
    Win32_UserAccountInfo.Колонки.Добавить("Description");
    Win32_UserAccountInfo.Колонки.Добавить("Disabled");
    Win32_UserAccountInfo.Колонки.Добавить("Domain");
    Win32_UserAccountInfo.Колонки.Добавить("FullName");
    Win32_UserAccountInfo.Колонки.Добавить("InstallDate");
    Win32_UserAccountInfo.Колонки.Добавить("LocalAccount");
    Win32_UserAccountInfo.Колонки.Добавить("Lockout");
    Win32_UserAccountInfo.Колонки.Добавить("Name");
    Win32_UserAccountInfo.Колонки.Добавить("PasswordChangeable");
    Win32_UserAccountInfo.Колонки.Добавить("PasswordExpires");
    Win32_UserAccountInfo.Колонки.Добавить("PasswordRequired");
    Win32_UserAccountInfo.Колонки.Добавить("SID");
    // Дополнительно.
    Win32_UserAccountInfo.Колонки.Добавить("BuildINAdministrator");
    Win32_UserAccountInfo.Колонки.Добавить("Group");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        //Win32_UserAccount = WinMGMT.ExecQuery("SELECT * FROM Win32_UserAccount Where LocalAccount = True");    // Загрузка процессора 75%.
        Win32_UserAccount = WinMGMT.ExecQuery("SELECT * FROM Win32_UserAccount");
        
        Для Каждого UserAccount ИЗ Win32_UserAccount Цикл
            UserAccountInfo = Win32_UserAccountInfo.Добавить();
            UserAccountInfo.AccountType = UserAccount.AccountType;
            UserAccountInfo.Caption = UserAccount.Caption;
            UserAccountInfo.Description = UserAccount.Description;
            UserAccountInfo.Disabled = UserAccount.Disabled;
            UserAccountInfo.Domain = UserAccount.Domain;
            UserAccountInfo.FullName = UserAccount.FullName;
            UserAccountInfo.InstallDate = UserAccount.InstallDate;
            UserAccountInfo.LocalAccount = UserAccount.LocalAccount;
            UserAccountInfo.Lockout = UserAccount.Lockout;
            UserAccountInfo.Name = UserAccount.Name;
            UserAccountInfo.PasswordChangeable = UserAccount.PasswordChangeable;
            UserAccountInfo.PasswordExpires = UserAccount.PasswordExpires;
            UserAccountInfo.PasswordRequired = UserAccount.PasswordRequired;
            UserAccountInfo.SID = UserAccount.SID;
            
            // Флажок Встроенная учетная запись администратора.
            UserAccountInfo.BuildINAdministrator = UserAccount.Name = АдминистраторПоУмолчанию.Name;
            
            // Группы, в которые входит пользователь.
            Отбор = Новый Структура("User", UserAccount.Name);
            СтрокиТаблицыГруппыИПользователи = ГруппыИПользователи.НайтиСтроки(Отбор);
            UserAccountInfo.Group = "";
            Для Каждого СтрокаТаблицы ИЗ СтрокиТаблицыГруппыИПользователи Цикл
                UserAccountInfo.Group = UserAccountInfo.Group + СтрокаТаблицы.Group + "; ";
            КонецЦикла;
            Если СтрДлина(UserAccountInfo.Group) > 0 Тогда
                UserAccountInfo.Group = Лев(UserAccountInfo.Group, СтрДлина(UserAccountInfo.Group)-2);
            КонецЕсли;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_UserAccountInfo;
    
КонецФункции


// Функция, позволяющая получить список групп пользователей на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_GroupList(Computer = ".")
    
    Win32_GroupInfo = Новый ТаблицаЗначений;
    Win32_GroupInfo.Колонки.Добавить("Caption");
    Win32_GroupInfo.Колонки.Добавить("Description");
    Win32_GroupInfo.Колонки.Добавить("Domain");
    Win32_GroupInfo.Колонки.Добавить("LocalAccount");
    Win32_GroupInfo.Колонки.Добавить("Name");
    Win32_GroupInfo.Колонки.Добавить("SID");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Group = WinMGMT.ExecQuery("SELECT * FROM Win32_Group Where LocalAccount = True");
        
        Для Каждого Group ИЗ Win32_Group Цикл
            GroupInfo = Win32_GroupInfo.Добавить();
            GroupInfo.Caption = Group.Caption;
            GroupInfo.Description = Group.Description;
            GroupInfo.Domain = Group.Domain;
            GroupInfo.LocalAccount = Group.LocalAccount;
            GroupInfo.Name = Group.Name;
            GroupInfo.SID = Group.SID;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_GroupInfo;
    
КонецФункции


// Функция, позволяющая получить список групп и их пользователей на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_GroupUsersList(Computer = ".")
    
    Win32_GroupUsersInfo = Новый ТаблицаЗначений;
    Win32_GroupUsersInfo.Колонки.Добавить("Group");
    Win32_GroupUsersInfo.Колонки.Добавить("User");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_GroupUser = WinMGMT.ExecQuery("SELECT * FROM Win32_GroupUser WHERE GroupComponent IS NOT NULL");
        
        Для Каждого GroupUser ИЗ Win32_GroupUser Цикл
            GroupInfo = Win32_GroupUsersInfo.Добавить();
            
            // Группа.
            GroupComponent = GroupUser.GroupComponent;
            ПозицицияИмени = Найти(GroupComponent, "Name=");
            GroupInfo.Group = Сред(GroupComponent, ПозицицияИмени+6);
            GroupInfo.Group = СтрЗаменить(GroupInfo.Group, """", "");
            
            // Пользователь.
            PartComponent = GroupUser.PartComponent;
            ПозицицияИмени = Найти(PartComponent, "Name=");
            GroupInfo.User = Сред(PartComponent, ПозицицияИмени+6);
            GroupInfo.User = СтрЗаменить(GroupInfo.User, """", "");
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_GroupUsersInfo;
    
КонецФункции


// Функция, позволяющая получить данные встроенной учетной записи Администратора на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_BuildINAdministrator(Computer = ".")
    
    BuildINAdministratorInfo = Новый Структура("AccountType,Caption,Description,Disabled,Domain,FullName,InstallDate,LocalAccount, Lockout,Name,PasswordChangeable,PasswordExpires,PasswordRequired,SID");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        //Win32_UserAccount = WinMGMT.ExecQuery("SELECT * FROM Win32_UserAccount Where LocalAccount = True");    // Загрузка процессора 75%.
        Win32_UserAccount = WinMGMT.ExecQuery("SELECT * FROM Win32_UserAccount");
        
        Для Каждого UserAccount ИЗ Win32_UserAccount Цикл
            AdmSID = Сред(UserAccount.SID,1,6) + "*" + Прав(UserAccount.SID, 4);
            Если AdmSID = "S-1-5-*-500" Тогда
                BuildINAdministratorInfo.AccountType = UserAccount.AccountType;
                BuildINAdministratorInfo.Caption = UserAccount.Caption;
                BuildINAdministratorInfo.Description = UserAccount.Description;
                BuildINAdministratorInfo.Disabled = UserAccount.Disabled;
                BuildINAdministratorInfo.Domain = UserAccount.Domain;
                BuildINAdministratorInfo.FullName = UserAccount.FullName;
                BuildINAdministratorInfo.InstallDate = UserAccount.InstallDate;
                BuildINAdministratorInfo.LocalAccount = UserAccount.LocalAccount;
                BuildINAdministratorInfo.Lockout = UserAccount.Lockout;
                BuildINAdministratorInfo.Name = UserAccount.Name;
                BuildINAdministratorInfo.PasswordChangeable = UserAccount.PasswordChangeable;
                BuildINAdministratorInfo.PasswordExpires = UserAccount.PasswordExpires;
                BuildINAdministratorInfo.PasswordRequired = UserAccount.PasswordRequired;
                BuildINAdministratorInfo.SID = UserAccount.SID;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
        
    Возврат BuildINAdministratorInfo;
        
КонецФункции


// Функция, позволяющая получить информацию о сетевых адаптерах на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    ТаблицаЗначений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
Функция Computer_NetworkAdapter(Computer = ".", OnlyIPv4 = Истина)
    Перем WinMGMT;
    Перем Win32_NetworkAdapterConfiguration, NetworkAdapterConfiguration;
    Перем Win32_NICInfo, NICInfo;
    
    Win32_NICInfo = Новый ТаблицаЗначений;
    Win32_NICInfo.Колонки.Добавить("ArpAlwaysSourceRoute");
    Win32_NICInfo.Колонки.Добавить("ArpUseEtherSNAP");
    Win32_NICInfo.Колонки.Добавить("Caption");
    Win32_NICInfo.Колонки.Добавить("DatabasePath");
    Win32_NICInfo.Колонки.Добавить("DeadGWDetectEnabled");
    Win32_NICInfo.Колонки.Добавить("DefaultIPGateway");
    Win32_NICInfo.Колонки.Добавить("DefaultTOS");
    Win32_NICInfo.Колонки.Добавить("DefaultTTL");
    Win32_NICInfo.Колонки.Добавить("Description");
    Win32_NICInfo.Колонки.Добавить("DHCPEnabled");
    Win32_NICInfo.Колонки.Добавить("DHCPLeaseExpires");
    Win32_NICInfo.Колонки.Добавить("DHCPLeaseObtained");
    Win32_NICInfo.Колонки.Добавить("DHCPServer");
    Win32_NICInfo.Колонки.Добавить("DNSDomain");
    Win32_NICInfo.Колонки.Добавить("DNSDomainSuffixSearchOrder");
    Win32_NICInfo.Колонки.Добавить("DNSEnabledForWINSResolution");
    Win32_NICInfo.Колонки.Добавить("DNSHostName");
    Win32_NICInfo.Колонки.Добавить("DNSServerSearchOrder");
    Win32_NICInfo.Колонки.Добавить("DomainDNSRegistrationEnabled");
    Win32_NICInfo.Колонки.Добавить("ForwardBufferMemory");
    Win32_NICInfo.Колонки.Добавить("FullDNSRegistrationEnabled");
    Win32_NICInfo.Колонки.Добавить("GatewayCostMetric");
    Win32_NICInfo.Колонки.Добавить("IGMPLevel");
    Win32_NICInfo.Колонки.Добавить("Index");
    Win32_NICInfo.Колонки.Добавить("InterfaceIndex");
    Win32_NICInfo.Колонки.Добавить("IPAddress");
    Win32_NICInfo.Колонки.Добавить("IPConnectionMetric");
    Win32_NICInfo.Колонки.Добавить("IPEnabled");
    Win32_NICInfo.Колонки.Добавить("IPFilterSecurityEnabled");
    Win32_NICInfo.Колонки.Добавить("IPPortSecurityEnabled");
    Win32_NICInfo.Колонки.Добавить("IPSecPermitIPProtocols");
    Win32_NICInfo.Колонки.Добавить("IPSecPermitTCPPorts");
    Win32_NICInfo.Колонки.Добавить("IPSecPermitUDPPorts");
    Win32_NICInfo.Колонки.Добавить("IPSubnet");
    Win32_NICInfo.Колонки.Добавить("IPUseZeroBroadcast");
    Win32_NICInfo.Колонки.Добавить("IPXAddress");
    Win32_NICInfo.Колонки.Добавить("IPXEnabled");
    Win32_NICInfo.Колонки.Добавить("IPXFrameType");
    Win32_NICInfo.Колонки.Добавить("IPXMediaType");
    Win32_NICInfo.Колонки.Добавить("IPXNetworkNumber");
    Win32_NICInfo.Колонки.Добавить("IPXVirtualNetNumber");
    Win32_NICInfo.Колонки.Добавить("KeepAliveInterval");
    Win32_NICInfo.Колонки.Добавить("KeepAliveTime");
    Win32_NICInfo.Колонки.Добавить("MACAddress");
    Win32_NICInfo.Колонки.Добавить("MTU");
    Win32_NICInfo.Колонки.Добавить("NumForwardPackets");
    Win32_NICInfo.Колонки.Добавить("PMTUBHDetectEnabled");
    Win32_NICInfo.Колонки.Добавить("PMTUDiscoveryEnabled");
    Win32_NICInfo.Колонки.Добавить("ServiceName");
    Win32_NICInfo.Колонки.Добавить("SettingID");
    Win32_NICInfo.Колонки.Добавить("TcpipNetbiosOptions");
    Win32_NICInfo.Колонки.Добавить("TcpMaxConnectRetransmissions");
    Win32_NICInfo.Колонки.Добавить("TcpMaxDataRetransmissions");
    Win32_NICInfo.Колонки.Добавить("TcpNumConnections");
    Win32_NICInfo.Колонки.Добавить("TcpUseRFC1122UrgentPointer");
    Win32_NICInfo.Колонки.Добавить("TcpWindowSize");
    Win32_NICInfo.Колонки.Добавить("WINSEnableLMHostsLookup");
    Win32_NICInfo.Колонки.Добавить("WINSHostLookupFile");
    Win32_NICInfo.Колонки.Добавить("WINSPrimaryServer");
    Win32_NICInfo.Колонки.Добавить("WINSScopeID");
    Win32_NICInfo.Колонки.Добавить("WINSSecondaryServer");
    Попытка
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_NetworkAdapterConfiguration = WinMGMT.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True");
    Исключение
        Возврат Win32_NICInfo;
    КонецПопытки;
    
    Для Каждого NetworkAdapterConfiguration ИЗ Win32_NetworkAdapterConfiguration Цикл
        NICInfo = Win32_NICInfo.Добавить();
        NICInfo.ArpAlwaysSourceRoute = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "ArpAlwaysSourceRoute");
        NICInfo.ArpUseEtherSNAP = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "ArpUseEtherSNAP");
        NICInfo.Caption = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "Caption");
        NICInfo.DatabasePath = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DatabasePath");
        NICInfo.DeadGWDetectEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DeadGWDetectEnabled");
        NICInfo.DefaultIPGateway = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "DefaultIPGateway", OnlyIPv4);
        NICInfo.DefaultTOS = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DefaultTOS");
        NICInfo.DefaultTTL = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DefaultTTL");
        NICInfo.Description = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "Description");
        NICInfo.DHCPEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DHCPEnabled");
        NICInfo.DHCPEnabled = ?(НЕ ТипЗнч(NICInfo.DHCPEnabled) = Тип("Булево"), Ложь, NICInfo.DHCPEnabled);
        Если NICInfo.DHCPEnabled Тогда
            NICInfo.DHCPLeaseExpires = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DHCPLeaseExpires"));
            NICInfo.DHCPLeaseObtained = ПреобразоватьЗначениеВДатуВремя(ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DHCPLeaseObtained"));
            NICInfo.DHCPServer = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DHCPServer");
        КонецЕсли;
        NICInfo.DNSDomain = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DNSDomain");
        NICInfo.DNSDomainSuffixSearchOrder = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "DNSDomainSuffixSearchOrder");
        NICInfo.DNSEnabledForWINSResolution = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DNSEnabledForWINSResolution");
        NICInfo.DNSEnabledForWINSResolution = ?(НЕ ТипЗнч(NICInfo.DNSEnabledForWINSResolution) = Тип("Булево"), Ложь, NICInfo.DNSEnabledForWINSResolution);
        NICInfo.DNSHostName = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DNSHostName");
        NICInfo.DNSServerSearchOrder = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "DNSServerSearchOrder", OnlyIPv4);
        NICInfo.DomainDNSRegistrationEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "DomainDNSRegistrationEnabled");
        NICInfo.ForwardBufferMemory = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "ForwardBufferMemory");
        NICInfo.FullDNSRegistrationEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "FullDNSRegistrationEnabled");
        NICInfo.GatewayCostMetric = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "GatewayCostMetric");
        NICInfo.IGMPLevel = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IGMPLevel");
        NICInfo.Index = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "Index");
        NICInfo.InterfaceIndex = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "InterfaceIndex");
        NICInfo.IPEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPEnabled");
        NICInfo.IPEnabled = ?(НЕ ТипЗнч(NICInfo.IPEnabled) = Тип("Булево"), Ложь, NICInfo.IPEnabled);
        Если NICInfo.IPEnabled Тогда
            NICInfo.IPAddress = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPAddress", OnlyIPv4);
            NICInfo.IPConnectionMetric = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPConnectionMetric");
            NICInfo.IPFilterSecurityEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPFilterSecurityEnabled");
            NICInfo.IPFilterSecurityEnabled = ?(НЕ ТипЗнч(NICInfo.IPFilterSecurityEnabled) = Тип("Булево"), Ложь, NICInfo.IPFilterSecurityEnabled);
            NICInfo.IPPortSecurityEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPPortSecurityEnabled");
            NICInfo.IPPortSecurityEnabled = ?(НЕ ТипЗнч(NICInfo.IPPortSecurityEnabled) = Тип("Булево"), Ложь, NICInfo.IPPortSecurityEnabled);
            NICInfo.IPSecPermitIPProtocols = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPSecPermitIPProtocols");
            NICInfo.IPSecPermitTCPPorts = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPSecPermitTCPPorts");
            NICInfo.IPSecPermitTCPPorts = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPSecPermitUDPPorts");
            NICInfo.IPSubnet = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPSubnet", OnlyIPv4);
            NICInfo.IPUseZeroBroadcast = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPUseZeroBroadcast");
        КонецЕсли;
        NICInfo.IPXEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPXEnabled");
        NICInfo.IPXEnabled = ?(НЕ ТипЗнч(NICInfo.IPXEnabled) = Тип("Булево"), Ложь, NICInfo.IPXEnabled);
        Если NICInfo.IPXEnabled Тогда
            NICInfo.IPXAddress = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "IPXAddress", OnlyIPv4);
            NICInfo.IPXFrameType = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPXFrameType");
            NICInfo.IPXMediaType = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPXMediaType");
            NICInfo.IPXNetworkNumber = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPXNetworkNumber");
            NICInfo.IPXVirtualNetNumber = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "IPXVirtualNetNumber");
        КонецЕсли;
        NICInfo.KeepAliveInterval = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "KeepAliveInterval");
        NICInfo.KeepAliveTime = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "KeepAliveTime");
        NICInfo.MACAddress = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "MACAddress");
        NICInfo.MTU = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "MTU");
        NICInfo.NumForwardPackets = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "NumForwardPackets");
        NICInfo.PMTUBHDetectEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "PMTUBHDetectEnabled");
        NICInfo.PMTUDiscoveryEnabled = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "PMTUDiscoveryEnabled");
        NICInfo.ServiceName = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "ServiceName");
        NICInfo.SettingID = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "SettingID");
        NICInfo.TcpipNetbiosOptions = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpipNetbiosOptions");
        NICInfo.TcpMaxConnectRetransmissions = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpMaxConnectRetransmissions");
        NICInfo.TcpMaxDataRetransmissions = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpMaxDataRetransmissions");
        NICInfo.TcpNumConnections = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpNumConnections");
        NICInfo.TcpUseRFC1122UrgentPointer = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpUseRFC1122UrgentPointer");
        NICInfo.TcpWindowSize = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "TcpWindowSize");
        NICInfo.WINSEnableLMHostsLookup = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "WINSEnableLMHostsLookup");
        NICInfo.WINSEnableLMHostsLookup = ?(НЕ ТипЗнч(NICInfo.WINSEnableLMHostsLookup) = Тип("Булево"), Ложь, NICInfo.WINSEnableLMHostsLookup);
        NICInfo.WINSHostLookupFile = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "WINSHostLookupFile");
        NICInfo.WINSPrimaryServer = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "WINSPrimaryServer");
        Если (ТипЗнч(NICInfo.WINSPrimaryServer) = Тип("Строка") И ЗначениеЗаполнено(NICInfo.WINSPrimaryServer)) Тогда
            NICInfo.WINSScopeID = ПолучитьЗначениеВПопытке(NetworkAdapterConfiguration, "WINSScopeID");
            NICInfo.WINSSecondaryServer = ПолучитьЗначениеИзCOMSafeArray(NetworkAdapterConfiguration, "WINSSecondaryServer");
        КонецЕсли;
        
    КонецЦикла;
    
    Win32_NICInfo.Сортировать("IPAddress");
    
    Возврат Win32_NICInfo;
    
КонецФункции

Функция ПолучитьЗначениеИзCOMSafeArray(хОбъект, хРеквизит, OnlyIPv4 = Ложь)
    Перем ЭлементМассива, Результат;
    
    Результат = "";
    Попытка
        Для Каждого ЭлементМассива ИЗ хОбъект[хРеквизит] Цикл
            ЭлементМассива = СокрЛП(ЭлементМассива);
            Если OnlyIPv4 И НЕ СтрЧислоВхождений(ЭлементМассива, ".") = 3 Тогда
                Продолжить;
            КонецЕсли;
            Результат = Результат + ЭлементМассива + ";";
        КонецЦикла;
        УдалитьПоследнийСимволВСтроке(Результат, 1);
        Результат = ?(СокрЛП(Результат) = ";", "", СокрЛП(Результат));
    Исключение
        Результат = "";
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции

Функция ПолучитьЗначениеВПопытке(хОбъект, хРеквизит)
    
    Попытка
        Возврат хОбъект[хРеквизит];
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции

Функция ПреобразоватьЗначениеВДатуВремя(Знач Значение)
    
    Попытка
        Возврат Дата(Лев(Значение,14));
    Исключение
        Возврат Дата("00010101");
    КонецПопытки;
    
    Возврат Дата("00010101");
    
КонецФункции

// Удаляет из строки указанное количество символов справа.
//
// Параметры:
//  Текст         - Строка - строка, в которой необходимо удалить последние символы;
//  ЧислоСимволов - Число  - количество удаляемых символов.
//
Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов)
    
    Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов);
    
КонецПроцедуры


// Функция получения информации о сетевом окружении.
// Возвращает:
// Таблица значений со структурой:
// №, Домен, Компьютер, IP-адрес, Комментарий.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
// Примечание:
// 1. WMI - медленнее, PING - быстрее.
// 2. WMI - безоконный, PING - с формированием окна.
//
&НаСервереБезКонтекста
Функция NetworkNeighborhood()
   
    ТСетевоеОкружение = Новый ТаблицаЗначений;
    ТСетевоеОкружение.Колонки.Добавить("нПП", ,"№");
    ТСетевоеОкружение.Колонки.Добавить("Домен");
    ТСетевоеОкружение.Колонки.Добавить("Компьютер");
    ТСетевоеОкружение.Колонки.Добавить("IP");
    ТСетевоеОкружение.Колонки.Добавить("Комментарий");
   
    Попытка
        ShellApplication = Новый COMОбъект("Shell.Application");
        // Сетевое окружение.
        Network = ShellApplication.NameSpace(18);
        // Вся сеть.
        EntireNetwork = Network.Items().Item("EntireNetwork").GetFolder;
       
        Для Каждого EntireNetworkItem ИЗ EntireNetwork.Items() Цикл
            Если EntireNetworkItem.Name = "Microsoft Windows Network" Тогда
                MicrosoftWindowsNetwork = EntireNetworkItem.GetFolder;
                Прервать;
            КонецЕсли;
        КонецЦикла;
       
        нПП = 0;
        Для Каждого MicrosoftWindowsNetworkItem ИЗ MicrosoftWindowsNetwork.Items() Цикл
            // Рабочая группа или Домен.
            Domain = MicrosoftWindowsNetworkItem.GetFolder;
            Домен = ВРег(Domain.Title);
            НоваяСтрока = ТСетевоеОкружение.Добавить();
            нПП = нПП+1;
            НоваяСтрока.нПП = нПП;
            НоваяСтрока.Домен = Домен;
            Для Каждого DomainItem ИЗ Domain.Items() Цикл
                // Компьютер.
                Компьютер = ВРег(DomainItem.Name);
                НоваяСтрока = ТСетевоеОкружение.Добавить();
                нПП = нПП+1;
                НоваяСтрока.нПП = нПП;
                НоваяСтрока.Домен = Домен;
                НоваяСтрока.Компьютер = Компьютер;
                Попытка
                    WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Компьютер + "\root\cimv2");
                    // Без вывода окна на экран.
                    IPConfig = WinMGMT.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where ipenabled = true");
                    // IP-адреса.
                    Для Каждого IPCFG ИЗ IPConfig Цикл
                        Если ЗначениеЗаполнено(IPCFG.IPAddress) Тогда
                            Для Каждого IP ИЗ IPCFG.IPAddress Цикл
                                НоваяСтрока = ТСетевоеОкружение.Добавить();
                                нПП = нПП+1;
                                НоваяСтрока.нПП = нПП;
                                НоваяСтрока.Домен = Домен;
                                НоваяСтрока.Компьютер = Компьютер;
                                НоваяСтрока.IP = IP;
                                НоваяСтрока.Комментарий = "WMI";
                            КонецЦикла;
                        КонецЕсли;
                    КонецЦикла;
                Исключение
                    Сообщить("Проверьте на компьютере " + Компьютер + "
                    |Windows Management Instrumentation (WMI):
                    |1. Состояние служб, отвечающих за WMI;
                    |2. Разрешение в брандмауэре для WMI.");
                    WshShell = Новый COMОбъект("WScript.Shell");
                    // Exec - выводит окно на экран.
                    WshExec = WshShell.Exec("ping -n 1 " + Компьютер);
                    TextStream = WshExec.StdOut;
                    // IP-адреса.
                    Пока НЕ TextStream.AtEndOfStream Цикл
                        СтрокаIP = TextStream.ReadLine();
                        ПозицияСкобкиЛевая = Найти(СтрокаIP, "[");
                        Если ПозицияСкобкиЛевая > 0 Тогда
                            ПозицияСкобкиПравая = Найти(СтрокаIP, "]");
                            IP = Сред(СтрокаIP, ПозицияСкобкиЛевая+1, ПозицияСкобкиПравая-ПозицияСкобкиЛевая-1);
                            НоваяСтрока = ТСетевоеОкружение.Добавить();
                            нПП = нПП+1;
                            НоваяСтрока.нПП = нПП;
                            НоваяСтрока.Домен = Домен;
                            НоваяСтрока.Компьютер = Компьютер;
                            НоваяСтрока.IP = IP;
                            НоваяСтрока.Комментарий = "PING";
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                КонецПопытки;
            КонецЦикла;
        КонецЦикла;
    Исключение
    КонецПопытки;
   
    Возврат ТСетевоеОкружение;
   
КонецФункции


// Функция, позволяющая невизуально "пропинговать" удаленный компьютер.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Ложь/Истина.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_PING(Computer = "localhost")
    
    WinMGMT = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\");
    Win32_PingStatus = WinMGMT.ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address = '" + Computer + "'");
    
    Успешно = Ложь;
    Для Каждого PingStatus ИЗ Win32_PingStatus Цикл
        Если PingStatus.StatusCode = NULL Тогда
            Успешно = Ложь;
        Иначе
            Успешно = PingStatus.StatusCode = 0;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Успешно;
    
КонецФункции


// Функция, позволяющая получить информацию о службах на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_SystemService(Computer = ".")
    
    Win32_ServiceInfo = Новый ТаблицаЗначений;
    Win32_ServiceInfo.Колонки.Добавить("Name");
    Win32_ServiceInfo.Колонки.Добавить("Caption");
    Win32_ServiceInfo.Колонки.Добавить("Description");
    Win32_ServiceInfo.Колонки.Добавить("PathName");
    Win32_ServiceInfo.Колонки.Добавить("StartMode");
    Win32_ServiceInfo.Колонки.Добавить("StartName");
    Win32_ServiceInfo.Колонки.Добавить("State");
    Win32_ServiceInfo.Колонки.Добавить("ProcessID");
    Win32_ServiceInfo.Колонки.Добавить("SystemName");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Service = WinMGMT.ExecQuery("SELECT * FROM Win32_Service");
        
        Для Каждого Service ИЗ Win32_Service Цикл
            ServiceInfo = Win32_ServiceInfo.Добавить();
            ServiceInfo.Name = Service.Name;
            ServiceInfo.Caption = Service.Caption;
            ServiceInfo.Description = Service.Description;
            ServiceInfo.PathName = Service.PathName;
            ServiceInfo.StartMode = Service.StartMode;
            ServiceInfo.StartName = Service.StartName;
            ServiceInfo.State = Service.State;
            ServiceInfo.ProcessID = Service.ProcessID;
            ServiceInfo.SystemName = Service.SystemName;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_ServiceInfo;

КонецФункции


// Функция, позволяющая получить информацию о процессах на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_SystemProcess(Computer = ".")
    
    Win32_ProcessInfo = Новый ТаблицаЗначений;
    Win32_ProcessInfo.Колонки.Добавить("Caption");
    Win32_ProcessInfo.Колонки.Добавить("CommandLine");
    Win32_ProcessInfo.Колонки.Добавить("CreationDate");
    Win32_ProcessInfo.Колонки.Добавить("CSName");
    Win32_ProcessInfo.Колонки.Добавить("ExecutablePath");
    Win32_ProcessInfo.Колонки.Добавить("OSName");
    Win32_ProcessInfo.Колонки.Добавить("ParentProcessId");
    Win32_ProcessInfo.Колонки.Добавить("ProcessId");
    Win32_ProcessInfo.Колонки.Добавить("WindowsVersion");
    Win32_ProcessInfo.Колонки.Добавить("Owner");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Process = WinMGMT.ExecQuery("SELECT * FROM Win32_Process");
        
        Для Каждого Proccess ИЗ Win32_Process Цикл
            ProccessInfo = Win32_ProcessInfo.Добавить();
            ProccessInfo.Caption = Proccess.Caption;
            ProccessInfo.CommandLine = Proccess.CommandLine;
            Попытка
                ProccessInfo.CreationDate = Дата(Лев(Proccess.CreationDate,14));
            Исключение
            КонецПопытки;
            ProccessInfo.CSName = Proccess.CSName;
            ProccessInfo.ExecutablePath = Proccess.ExecutablePath;
            ProccessInfo.OSName = Proccess.OSName;
            ProccessInfo.ParentProcessID = Proccess.ParentProcessID;
            ProccessInfo.ProcessID = Proccess.ProcessID;
            ProccessInfo.WindowsVersion = Proccess.WindowsVersion;
            User = "";
            Domain = "";
            Owner = Proccess.GetOwner(User, Domain);
            Если User = NULL И Domain = NULL Тогда
                ProccessInfo.Owner = "System";
            Иначе
                ProccessInfo.Owner = Domain + "\" + User;
            КонецЕсли;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_ProcessInfo;

КонецФункции


// Функция, позволяющая завершить некий процесс на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
//    ProccessName - Имя процесса, который необходимо завершить.
// Возвращаемое значение:
//    Количество завершенных процессов.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_KillProccess(Computer = ".", ProccessName = "")
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Process = WinMGMT.ExecQuery("SELECT * FROM Win32_Process Where Name = '" + ProccessName + "'");
        
        Для Каждого Process ИЗ Win32_Process Цикл
            Process.Terminate();
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_Process.Count;

КонецФункции


// Функция, позволяющая получить список событий за период из журналов System/Application локального/удаленного компьютера.
// Параметры:
//    Computer - Имя компьютера.
//    Logfile - Имя LOG-файла (System/Application).
//    EventsType:
//        1 - Error
//        2 - Warning
//        3 - Information
//        4 - Security audit success
//        5 - Security audit failure
//    DateStart - Дата начала в формате даты.
//    DateEnd - Дата окончания в формате даты.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_EventsList(Computer = ".", Logfile = "System", EventType = "0", DateStart = Неопределено, DateEnd = Неопределено)
    
    Если DateStart = Неопределено Тогда
        DateStart = ТекущаяДата();
    КонецЕсли;
    
    Если DateEnd = Неопределено Тогда
        DateEnd = ТекущаяДата();
    КонецЕсли;
    
    FiltreType = ?(EventType = "0", "", " and EventType = " + EventType);
    
    Win32_EventsInfo = Новый ТаблицаЗначений;
    Win32_EventsInfo.Колонки.Добавить("Category");
    Win32_EventsInfo.Колонки.Добавить("ComputerName");
    Win32_EventsInfo.Колонки.Добавить("EventCode");
    Win32_EventsInfo.Колонки.Добавить("Message");
    Win32_EventsInfo.Колонки.Добавить("RecordNumber");
    Win32_EventsInfo.Колонки.Добавить("SourceName");
    Win32_EventsInfo.Колонки.Добавить("TimeWritten");
    Win32_EventsInfo.Колонки.Добавить("Type");
    Win32_EventsInfo.Колонки.Добавить("User");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_NTLogEvent = WinMGMT.ExecQuery("SELECT * FROM Win32_NTLogEvent Where Logfile = '" + Logfile + "'"
        + FiltreType
        + " and TimeWritten >= '" + НачалоДня(DateStart) + "' and TimeWritten <= '" + КонецДня(DateEnd) + "'");
        
        Для Каждого NTLogEvent ИЗ Win32_NTLogEvent Цикл
            EventsInfo = Win32_EventsInfo.Добавить();
            EventsInfo.Category = NTLogEvent.Category;
            EventsInfo.ComputerName = NTLogEvent.ComputerName;
            EventsInfo.EventCode = NTLogEvent.EventCode;
            EventsInfo.Message = NTLogEvent.Message;
            EventsInfo.RecordNumber = NTLogEvent.RecordNumber;
            EventsInfo.SourceName = NTLogEvent.SourceName;
            EventsInfo.TimeWritten = Дата(Лев(NTLogEvent.TimeWritten,14));
            EventsInfo.Type = NTLogEvent.Type;
            EventsInfo.User = NTLogEvent.User;
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Возврат Win32_EventsInfo;

КонецФункции


// Функция, позволяющая получить информацию об открытых сессиях на сервере (локальный/удаленный компьютер).
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_ServerSession(Computer = ".")
    
    ServerSessionInfo = Новый ТаблицаЗначений;
    ServerSessionInfo.Колонки.Добавить("ActiveTime");
    ServerSessionInfo.Колонки.Добавить("Caption");
    ServerSessionInfo.Колонки.Добавить("ClientType");
    ServerSessionInfo.Колонки.Добавить("ComputerName");
    ServerSessionInfo.Колонки.Добавить("Description");
    ServerSessionInfo.Колонки.Добавить("IdleTime");
    ServerSessionInfo.Колонки.Добавить("InstallDate");
    ServerSessionInfo.Колонки.Добавить("Name");
    ServerSessionInfo.Колонки.Добавить("ResourcesOpened");
    ServerSessionInfo.Колонки.Добавить("SessionType");
    ServerSessionInfo.Колонки.Добавить("Status");
    ServerSessionInfo.Колонки.Добавить("TransportName");
    ServerSessionInfo.Колонки.Добавить("UserName");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        ServerSession = WinMGMT.ExecQuery("Select * from Win32_ServerSession");
        
        Для Каждого Session ИЗ ServerSession Цикл
            SessionInfo = ServerSessionInfo.Добавить();
            SessionInfo.ActiveTime = Формат(Дата("00010101")+Session.ActiveTime,"ДЛФ=T");
            SessionInfo.Caption = Session.Caption;
            SessionInfo.ClientType = Session.ClientType;
            SessionInfo.ComputerName = Session.ComputerName;
            SessionInfo.Description = Session.Description;
            SessionInfo.IdleTime = Формат(Дата("00010101")+Session.IdleTime,"ДЛФ=T");
            SessionInfo.InstallDate = Session.InstallDate;
            SessionInfo.Name = Session.Name;
            SessionInfo.ResourcesOpened = Session.ResourcesOpened;
            SessionInfo.SessionType = Session.SessionType;
            SessionInfo.Status = Session.Status;
            SessionInfo.TransportName = Session.TransportName;
            SessionInfo.UserName = Session.UserName;
        КонецЦикла;
    
    Исключение
    КонецПопытки;
    
    Возврат ServerSessionInfo;
    
КонецФункции


// Функция, позволяющая получить информацию о терминальных сессиях на сервере (локальный/удаленный компьютер).
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Name = DomainName\UserName - Имя пользователя.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_Terminal(Computer = ".")
    
    TerminalInfo = Новый ТаблицаЗначений;
    TerminalInfo.Колонки.Добавить("Caption");
    TerminalInfo.Колонки.Добавить("Description");
    TerminalInfo.Колонки.Добавить("fEnableTerminal");
    TerminalInfo.Колонки.Добавить("InstallDate");
    TerminalInfo.Колонки.Добавить("Name");
    TerminalInfo.Колонки.Добавить("Status");
    TerminalInfo.Колонки.Добавить("TerminalName");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Terminal = WinMGMT.ExecQuery("Select * from Win32_Terminal");
        
        Для Каждого Session ИЗ Terminal Цикл
            SessionInfo = TerminalInfo.Добавить();
            SessionInfo.Caption = Session.Caption;
            SessionInfo.Description = Session.Description;
            SessionInfo.fEnableTerminal = Session.fEnableTerminal;
            SessionInfo.InstallDate = Session.InstallDate;
            SessionInfo.Name = Session.Name;
            SessionInfo.Status = Session.Status;
            SessionInfo.TerminalName = Session.TerminalName;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат TerminalInfo;
    
КонецФункции


// Функция, позволяющая получить информацию об установленных подключениях к серверу (локальный/удаленный компьютер).
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_ServerConnection(Computer = ".")
    
    ServerConnectionInfo = Новый ТаблицаЗначений;
    ServerConnectionInfo.Колонки.Добавить("ActiveTime");
    ServerConnectionInfo.Колонки.Добавить("Caption");
    ServerConnectionInfo.Колонки.Добавить("ComputerName");
    ServerConnectionInfo.Колонки.Добавить("ConnectionID");
    ServerConnectionInfo.Колонки.Добавить("Description");
    ServerConnectionInfo.Колонки.Добавить("InstallDate");
    ServerConnectionInfo.Колонки.Добавить("Name");
    ServerConnectionInfo.Колонки.Добавить("NumberOfFiles");
    ServerConnectionInfo.Колонки.Добавить("NumberOfUsers");
    ServerConnectionInfo.Колонки.Добавить("ShareName");
    ServerConnectionInfo.Колонки.Добавить("Status");
    ServerConnectionInfo.Колонки.Добавить("UserName");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        ServerConnection = WinMGMT.ExecQuery("Select * from Win32_ServerConnection");
        
        Для Каждого Connection ИЗ ServerConnection Цикл
            ConnectionInfo = ServerConnectionInfo.Добавить();
            ConnectionInfo.ActiveTime = Формат(Дата("00010101")+Connection.ActiveTime,"ДЛФ=T");
            ConnectionInfo.Caption = Connection.Caption;
            ConnectionInfo.ComputerName = Connection.ComputerName;
            ConnectionInfo.ConnectionID = Connection.ConnectionID;
            ConnectionInfo.Description = Connection.Description;
            ConnectionInfo.InstallDate = Connection.InstallDate;
            ConnectionInfo.Name = Connection.Name;
            ConnectionInfo.NumberOfFiles = Connection.NumberOfFiles;
            ConnectionInfo.NumberOfUsers = Connection.NumberOfUsers;
            ConnectionInfo.ShareName = Connection.ShareName;
            ConnectionInfo.Status = Connection.Status;
            ConnectionInfo.UserName = Connection.UserName;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат ServerConnectionInfo;

КонецФункции


// Функция, позволяющая произвести завершение сеанса/перезагрузку/выключение локаьного/удаленного компьютера.
// Параметры:
//    Computer - Имя компьютера.
//    Flags - Действие:
//    Log Off;
//    0 (0x0)    -    Log Off
//    4 (0x4)    -    Forced Log Off (0 + 4)
//    Shutdown:
//    1 (0x1)    -    Shutdown
//    5 (0x5)    -    Forced Shutdown (1 + 4)
//    Reboot:
//    2 (0x2)    -    Reboot
//    6 (0x6)    -    Forced Reboot (2 + 4)
//    Power Off:
//    8 (0x8)    -    Power Off
//    12 (0xC)-    Forced Power Off (8 + 4)
// Возвращаемое значение:
//    Нет.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_RebootShutdown(Computer = ".", Flags = 0)
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\" + Computer + "\root\cimv2");
        Win32_OS = WinMGMT.ExecQuery("SELECT * FROM Win32_OperatingSystem where Primary=true");
       
        Reserved = 0;   // Зарезервированный параметр. Игнорируется.
        Для Каждого OS ИЗ Win32_OS Цикл
            OS.Win32Shutdown(Flags, Reserved);
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
КонецФункции

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


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

См. также

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

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

15.11.2024    294    Baser    2    

1

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

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

12.11.2024    828    Tantor    19    

14

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

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

29.10.2024    3132    Tantor    38    

34

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

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

08.10.2024    727    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    4336    Xershi    10    

17

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

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

13.08.2024    2962    1CUnlimited    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wunderland 202 12.12.12 17:36 Сейчас в теме
за примеры в контексте 1С - отдельное спасибо
7. StepByStep 3687 13.12.12 12:58 Сейчас в теме
(1) wunderland,
Пожалуйста. Главное - чтобы было полезно.
2. pumbaE 12.12.12 19:00 Сейчас в теме
Только не позволяет выполнять это все на linux.
3. q_i 584 13.12.12 12:07 Сейчас в теме
(2) pumbaE, хорошую тему для хорошей статьи обозначил! ;)
Интереса ради посмотрел - в 8.3 работает КомандаСистемы("sh -c """ + ТекстКоманды + """");
8. StepByStep 3687 13.12.12 13:01 Сейчас в теме
(2) pumbaE,
Linux - не проверялось. Работаю только в Windows.
4. pumbaE 13.12.12 12:12 Сейчас в теме
6. q_i 584 13.12.12 12:15 Сейчас в теме
(4) pumbaE, я не обещал готового рецепта ))) я лишь сказал что хорошая тема для проработки.
47. q_i 584 03.04.13 16:09 Сейчас в теме
(4) pumbaE, на сервере ЗапуститьПриложение().
5. q_i 584 13.12.12 12:13 Сейчас в теме
Вместо реализации задержки через ping имхо логичнее использовать WScript.Sleep(...).
9. StepByStep 3687 13.12.12 13:10 Сейчас в теме
(5) q_i,
Метод Sleep действительно существует у объекта WScript.
НО WScript существует только для скриптов, которые вызываются из командной строки,
Объект WScript нельзя получить, используя COMОбъект.
Следовательно надо создавать файл, скажем во временной папке, записать туда текст скрипта, а потом его выполнять, после этого - в общем случае - удалить этот файл.
user1384340; +1 Ответить
10. q_i 584 13.12.12 14:44 Сейчас в теме
11. astonvilla 234 14.12.12 10:54 Сейчас в теме
Не знаю, пригодиться ли это, но не плюсануть за картинку не мог :))))))
ЧИА; StepByStep; +2 Ответить
17. StepByStep 3687 14.12.12 11:34 Сейчас в теме
(11) astonvilla,
Мне тоже картинка понравилась .........
57. ЧИА 169 15.02.14 08:17 Сейчас в теме
проснулся в 5 утра, полазил по сайту, через рекламу и косвенные ссылки попал сюда, решил сохранить, а вот коммент (11) astonvilla, вначале не понял.
пересмотрел внизу картинки, почесал голову, поработал, еще раз пересмотрел
догадался посмотреть вверху

ржал минут 5
плюсую
12. DMSDeveloper 148 14.12.12 11:11 Сейчас в теме
Для работы со скриптами на уровне COM Используется MSScriptControl.
В примере есть упоминание о нем.
&НаКлиентеНаСервереБезКонтекста
Функция ВремяВМиллисекундах()


Но тут есть одна проблема с которой я столкнулся и разрешить так и не смог.

При создании объекта на 64 битном сервере 1С (Именно 1С, не Win) - объект не создается, что то там с политиками безопасности от мелкомягких. Не все 32 битные COM-ы могут быть вызваны 64 битным приложением.
MSScriptControl - один из них :(
StepByStep; +1 Ответить
13. ediks 337 14.12.12 11:19 Сейчас в теме
Нисколько не уменьшая ценности публикации:
Еще больше примеров, правда на VB, на ресурсе Разработка скриптов
wowik; a.podobin; StepByStep; +3 Ответить
15. StepByStep 3687 14.12.12 11:32 Сейчас в теме
(13) ediks,
Спасибо. Надо будет посмотреть.
14. SeiOkami 3515 14.12.12 11:30 Сейчас в теме
Плюс!
Автор, спасибо за примеры в контексте 1С. Напиши, пожалуйста, статью с бОльшим количеством примеров =)
StepByStep; +1 Ответить
16. StepByStep 3687 14.12.12 11:33 Сейчас в теме
(14) SeiOkami,
Статья обязательно пополнится примерами.
Есть еще определенные "вещички" ...
18. KliMich 14.12.12 12:01 Сейчас в теме
Спасибо! Очень полезно! Хотелось бы продолжения (часть 2, часть 3 и т.д.).
20. StepByStep 3687 17.12.12 10:45 Сейчас в теме
(18) KliMich,
ЕСТЬ ПРОДОЛЖЕНИЕ !
19. Stamper 43 14.12.12 14:03 Сейчас в теме
однозначно плюс. жаль, нельзя второй поставить за картинку -- просто ураган :)
StepByStep; +1 Ответить
21. mzelensky 53 20.12.12 07:52 Сейчас в теме
22. zarucheisky 20.12.12 13:25 Сейчас в теме
Автору стоило бы знать что большинство, что понаписано реализуется самой платформой не хуже.
Да и есть старый, добрый
www.script-coding.com
Шёпот теней; +1 Ответить
23. StepByStep 3687 23.12.12 12:35 Сейчас в теме
(22) zarucheisky,
Определенные - да.
Ссылка на старый-добрый www.script-coding.com была ранее 13. ediks
24. StepByStep 3687 23.12.12 12:36 Сейчас в теме
Добавлена новая функция СетевоеОкружение().
25. StepByStep 3687 27.12.12 21:03 Сейчас в теме
Добавлены новые функции:
1. SetDateTime() - Установка системных Даты и Времени.
2. ControlPanelItem() - Вызов оснастки из Панели управления.
26. StepByStep 3687 09.01.13 09:37 Сейчас в теме
Добавлена функция, позволяющая получить список подключенных принтеров локального/удаленного компьютера.
27. StepByStep 3687 13.01.13 23:18 Сейчас в теме
Добавлены:
1. Функция, позволяющая информацию о BIOS локального/удаленного компьютера.
2. Функция, позволяющая получить Имя пользователя, зарегистрировавшегося на локальном/удаленном компьютере.
28. StepByStep 3687 17.01.13 16:03 Сейчас в теме
Добавлено пояснение по настройке и проверке работы Windows Management Instrumentation - Инструментарий управления Windows.
29. StepByStep 3687 24.01.13 11:56 Сейчас в теме
Добавлены 2 новые функции: ServerSession и ServerConnection.
30. yuraos 1003 26.01.13 13:31 Сейчас в теме
Спасибо автору!
Недавно озадачился, как можно в 1с8.х засечь время выполнения в коде миллесекундах.
И вот нашел здесь один из способов.
31. yuraos 1003 29.01.13 09:07 Сейчас в теме
(30)
еще раз спасибо - реально пригодилось!
теперь могу засекать время выполнения запросов с точностью до миллисекунды.
---
проблемка с другой процедуркой:
SendKeys(KEYS_ENG = "^+z", KEYS_RUS = "^+я")
Пытаюсь имитировать вызов на редактирование поля ввода в форме по клавише 'F4'
(смотри код ниже) - ничего выходит (тип редактируемого значения - "СписокЗначений").
Процедура SendKeys(KEYS_ENG = "^+z", KEYS_RUS = "^+я")
	Если ПустаяСтрока(KEYS_ENG) И ПустаяСтрока(KEYS_ENG) Тогда
		Возврат;
	КонецЕсли; 
    
    Попытка
        WshShell = Новый COMОбъект("Wscript.Shell");
		Если НЕ ПустаяСтрока(KEYS_ENG) Тогда
	        WshShell.SendKeys(KEYS_ENG);    // для случая, если текущей является английская раскладка клавиатуры.
		КонецЕсли; 
		Если НЕ ПустаяСтрока(KEYS_RUS) Тогда
	        WshShell.SendKeys(KEYS_RUS);    // для случая, если текущей является русская раскладка клавиатуры.
		КонецЕсли; 
        // SendKeys(String) - имитируется нажатие клавиши или последовательности клавиш, указанных в параметре String.
        // В качестве параметра можно указывать как алфавитно-цифровые символы, так и символы специальных клавиш, например:
        // "Enter", "Tab", "F1", "Alt", "Shift", "Ctrl" и т.д. 
        // Для указания клавиш "Alt", "Shift", "Ctrl" существуют специальные коды:
        // "Shift" - +;
        // "Ctrl" - ^;
        // "Alt" - %.
        // Если возникнет необходимость передать специальные символы именно как символы, а не команды, 
        // нужно заключать их в фигурные скобки, например {+}.   
	Исключение
		Сообщить(ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Процедура СписокНомеровПС_КонтМенюИзменить(Кнопка)
	Если ЭтаФорма.ТекущийЭлемент <> ЭлементыФормы.СписокНомеровПС Тогда
		ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.СписокНомеровПС;
	КонецЕсли;
	SendKeys("F4","F4");
КонецПроцедуры

Показать
32. StepByStep 3687 30.01.13 12:09 Сейчас в теме
(31) yuraos,
Пожалуйста. Рад, что Вам пригодилось.

По поводу Вашего вопроса:
Некоторые специальные символы следует всегда задавать заключёнными в фигурные скобки.
В частности и F4:
SendKeys("{F4}","{F4}");

Попробуйте.

Удачи.
33. yuraos 1003 31.01.13 06:51 Сейчас в теме
(32)
у щайтан-скобка!
SendKeys("{F4}","{F4}") - проканало.
спасибо огромное!!!

А нет в Windows Script Host каких-нибудь объектов,
которые позволили бы в 1С через подписку на события
перехватывать обработку ввода с мыши и клавиатуры?
34. StepByStep 3687 06.02.13 13:07 Сейчас в теме
(33) yuraos,
WSH - это работа в командной строке.
И опции типа SendKeys - это скорее приятные полезности.
Ответ: нет.
39. yuraos 1003 13.02.13 18:45 Сейчас в теме
(33)
иище раз о ВремяВМиллисекундах():
В каких ситуациях в функции может сработать исключение и
вместо миллисекунд функция вернет 1С-ное текущее время-дату ???

PS:
В своем варианте по исключению я возвращаю значение:
1000*(ТекущаяДата() - '1970-01-01:06:00:00')
как более подходящее по смыслу - округленное до целых секунд число миллисекунд.
06:00:00 - это наверное из-за разницы времени между Новосибирском и Гринвичем.
42. StepByStep 3687 16.02.13 15:26 Сейчас в теме
(39) yuraos,
В каких ситуациях в функции может сработать исключение и
вместо миллисекунд функция вернет 1С-ное текущее время-дату ???

При тестировании на 32-битных системах "Исключение" не вызывалось.
Возможно ситуация, описанная (12) DMSDeveloper.
35. StepByStep 3687 06.02.13 13:09 Сейчас в теме
Добавлены новые функции: Computer_Processor(), Computer_RAM(), Computer_TotalPhysicalMemory(), Computer_VirtualMemory().
36. StepByStep 3687 08.02.13 16:58 Сейчас в теме
Добавлены новые функции: Computer_Motherboard() и Computer_Video().
37. StepByStep 3687 13.02.13 00:31 Сейчас в теме
Добавлены функции Computer_UserList(), Computer_GroupList(), Computer_GroupUsersList(), Computer_BuildINAdministrator().
38. soli_M_x6 13.02.13 00:47 Сейчас в теме
40. Матрос 14.02.13 04:52 Сейчас в теме
41. OVladius 32 14.02.13 13:23 Сейчас в теме
43. StepByStep 3687 17.02.13 17:25 Сейчас в теме
Добавлены функции: Computer_SystemService(), Computer_SystemProcess(), Computer_EventsList()
44. StepByStep 3687 20.02.13 11:25 Сейчас в теме
Добавлены функции: Computer_KillProccess(), Computer_RebootShutdown().
45. StepByStep 3687 01.03.13 01:47 Сейчас в теме
Добавлена функция: Computer_PING(), позволяющая невизуально "пропинговать" удаленный компьютер.
46. StepByStep 3687 25.03.13 01:59 Сейчас в теме
Добавлена Функция Computer_Terminal(), позволяющая получить информацию о терминальных сессиях на сервере (локальный/удаленный компьютер).
48. slaviksoft 75 12.07.13 14:07 Сейчас в теме
при вызове Win32Shutdown с флагами отличными от 0 - ничего не происходит
или я что-то не так делаю

Пример:
 WinMGMT = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2");
        Win32_OS = WinMGMT.ExecQuery("SEL ECT * FR OM Win32_OperatingSystem where Primary=true");
        
        Reserved = 0;   // Зарезервированный параметр. Игнорируется.
        Для Каждого OS ИЗ Win32_OS Цикл
            OS.Win32Shutdown(6, Reserved);
        КонецЦикла;
StepByStep; +1 Ответить
49. StepByStep 3687 23.09.13 01:58 Сейчас в теме
(48) slaviksoft,
Какая у Вас операционка ?
51. StepByStep 3687 23.09.13 12:29 Сейчас в теме
(48) slaviksoft,
СПАСИБО.

Вместо строчки:
WinMGMT = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2"); 


Необходимо:
WinMGMT = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\" + Computer + "\root\cimv2");


Проверил на Windows XP x32 и Windows 7 x64.
50. StepByStep 3687 23.09.13 02:00 Сейчас в теме
23.09.2013 г.

Добавлены функции:

Computer_WindowsInfo()
Computer_Monitor()
Computer_PhysicalMemory()
52. echo77 1906 01.10.13 09:24 Сейчас в теме
Функция NetworkNeighborhood() ничего не возвращает в ОС старше Win-XP
StepByStep; +1 Ответить
53. StepByStep 3687 01.10.13 10:09 Сейчас в теме
(52) echo77,
Да. Вы правильно указали.
В обработке 1С:Администратор http://infostart.ru/public/172189/ получение сетевого окружения переработано и дополнено для Windows Vista и выше.
Позднее подправлю статью.
СПАСИБО.
54. StepByStep 3687 08.10.13 00:55 Сейчас в теме
07.10.2013.
Функция Computer_MAC_IP() заменена на функцию Computer_NetworkAdapter().
55. MarSeN 987 16.10.13 08:59 Сейчас в теме
StepByStep,
А в каком случае SendKey может использоваться на сервере? К процедуре указана директива &НаКлиентеНаСервереБезКонтекста.
Я там понимаю, что для сендкея обязательно нужно открытое окно приложения и тем более открытая сессия (нормальная сессия с рабочим столом и т.п.), а на сервере такого вроде 1С сервер не создает?
StepByStep; +1 Ответить
56. StepByStep 3687 20.10.13 15:51 Сейчас в теме
(55) MarSeN,
Согласен с Вами, "физического" смысла это не имеет.
58. Voittamaton 29.03.14 16:31 Сейчас в теме
Почему-то не получается отправить символы с цифровой клавиатуры.
Нижеперечисленные варианты (также без скобок "()") приводят к ошибке "Произошла исключительная ситуация (0x80070057)".

1)
Ws = Новый COMОбъект("Wscript.shell");
Ws.SendKeys("^+({Pad-})");


2)
Ws = Новый COMОбъект("Wscript.shell");
Ws.SendKeys("^+({Subtract})");
61. StepByStep 3687 14.01.15 12:59 Сейчас в теме
(58) Voittamaton,
SendKeys("^+{SUBTRACT}"); - Ошибки не вызвало.
59. mzelensky 53 09.07.14 17:52 Сейчас в теме
Доброго времени суток! Подскажите плиз. Юзаю одну из ваших функций

Computer_GroupUsersList(

Она возвращает имя группы и имя пользователя. Можно ли как-то получить "полное имя пользователя" ну или как это назвать ПРЕДСТАВЛЕНИЕ. Т.е. то Имя, которое отображается у пользователя, если нажать кнопку "Пуск". Например имя пользователя может быть "Zelensky" а полное имя "Зеленский Максим". Вот мне нужно как-то получить это полное имя.
60. StepByStep 3687 14.01.15 12:42 Сейчас в теме
(59) mzelensky,
Функция Computer_UserList() возвращает таблицу значений, в которой есть FullName.
62. StepByStep 3687 14.01.15 13:00 Сейчас в теме
14.01.2015.
Добавлена функция
ПреобразоватьИзСтрокиВДату() - Ф., возвращающая результат преобразования строкового значения даты в значение в формате даты.
63. simple 19.01.15 17:57 Сейчас в теме
64. CaSH_2004 373 18.09.16 22:13 Сейчас в теме
Подскажите кто сталкивался, как решить проблему такую: пытаюсь получить список пользователей на удаленном сервере, так вот с одними серверами происходит нормально, а на одном не выполняет даже инициализацию: ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
сначала ругался "Ошибка получения объекта COM: Сервер RPC недоступен."
Почитал тут что брэндмауэр нужно настраивать, пробовал но не помогало и я его вообще отключил, теперь ругается "Ошибка получения объекта COM: Отказано в доступе."

65. _1c_coder 53 30.09.17 12:48 Сейчас в теме
Подскажите как с помощью даного скрипта емулировать нажатие на маленькой клавиатуре NUM + и NUM -

так ошибка http://prntscr.com/gri3o7
ОбъектShell = Новый COMОбъект("Wscript.Shell");
	ОбъектShell.SendKeys("{Add}");
ОбъектShell.SendKeys("{Subtract}");



нужно когда картинка активизирована на форме кнопкой УМЕНЬШИТЬ УВЕЛИЧИТЬ менять масштаб
просто нажатие + и - работает,
ПОМОГИТЕ ЗНАТОКИ!!!!!!!!!!!
66. forusing 53 21.02.19 13:21 Сейчас в теме
(65) Для тех, кто долго искал как программно "нажать" Ctrl+Shift+{+} (развернуть все ветки; актуально для таблицы формы, представленной в виде дерева по произвольному запросу с группировкой). Работает следующий код:
	objShell = Новый COMОбъект( "WScript.Shell" );
	objShell.SendKeys( "^+" + Символ( 107 ) );
Amigo_0; RuzAleks; UberElder; +3 Ответить
67. UberElder 27.01.20 08:20 Сейчас в теме
(66)
"^+" + Символ( 107 )
Я так долго искал)) огромное тебе человеческое спасибо)
68. UberElder 27.01.20 08:33 Сейчас в теме
(66)
objShell = Новый COMОбъект( "WScript.Shell" );
objShell.SendKeys( "^+" + Символ( 107 ) );

Не подскажешь, может ты искал и знаешь какой символ надо подставить для того чтобы свернуть?
69. gero 60 27.01.21 12:04 Сейчас в теме
(68)
Попробуй 109 для сворачивания группировок табличного документа
70. simuljakr 203 11.01.22 10:30 Сейчас в теме
Спасибо!
Очень полезный набор функций.
В частности - пригодилась ЗадержкаВВыполнении().

Очень не хватает функции:

ОтформатироватьВсеКомпьютерыВЛокальнойСетиНафиг_И_СтеретьИмБ­ИОСЫЗаодно()
71. eugeniezheludkov 45 10.08.22 02:05 Сейчас в теме
(70) исходя из опыта пришел к выводу что если код на 1С упирается в то что требуется функция sleep, смотри что не так с архитектурой, это 100% сигнал рефакторинга.

это как в свое время использование функции goto/перейти ... вроде ничего такого, но если к ней вдруг понадобилось обратиться, смотри что не так с архитектурой.
эдакие маркеры говнокода чтоли
72. simuljakr 203 16.05.23 20:10 Сейчас в теме
При подключении сетевого принтера выдает ошибку в этой строке:

WshNetwork.AddWindowsPrinterConnection("\\192.168.102.221\MobilePrint1")


Ошибка при вызове метода контекста (AddWindowsPrinterConnection): Произошла исключительная ситуация (0x800706ba)

Проверил - IP адрес и имя принтера правильные.
Проверял при помощи WshNetwork.EnumPrinterConnections()

Кто-нибудь сталкивался ? Как можно исправить ?
73. adm1nb3k 22.01.24 02:20 Сейчас в теме
Указать бы еще и
PhysicalDiskInfo.SerialNumber = PhysicalDisk.SerialNumber;
Оставьте свое сообщение