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




Описание возможностей 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 + »
ootcimv2″
);
        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 = «#k8SjZc9Dxk+z», KEYS_RUS = «#k8SjZc9Dxk+я»)
    
    Попытка
        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» — #k8SjZc9Dxk;
        // «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:UsersPublic.
        ПеременныеОкружения.Вставить(«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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        //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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        //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 + »
ootcimv2″
);

        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:\» + Компьютер + »
ootcimv2″
);
                    // Без вывода окна на экран.
                    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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2
«);
        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 + »
ootcimv2″
);
        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 = DomainNameUserName — Имя пользователя.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// 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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        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 + »
ootcimv2″
);
        Win32_OS = WinMGMT.ExecQuery(«SELECT * FROM Win32_OperatingSystem where Primary=true»);
       
        Reserved = 0;   // Зарезервированный параметр. Игнорируется.
        Для Каждого OS ИЗ Win32_OS Цикл
            OS.Win32Shutdown(Flags, Reserved);
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
КонецФункции

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


66 Comments

  1. wunderland

    за примеры в контексте 1С — отдельное спасибо

    Reply
  2. pumbaE

    Только не позволяет выполнять это все на linux.

    Reply
  3. q_i

    (2) pumbaE, хорошую тему для хорошей статьи обозначил! 😉

    Интереса ради посмотрел — в 8.3 работает КомандаСистемы(«sh -c «»» + ТекстКоманды + «»»»);

    Reply
  4. pumbaE

    А на сервере?

    Reply
  5. q_i

    Вместо реализации задержки через ping имхо логичнее использовать WScript.Sleep(…).

    Reply
  6. q_i

    (4) pumbaE, я не обещал готового рецепта ))) я лишь сказал что хорошая тема для проработки.

    Reply
  7. StepByStep

    (1) wunderland,

    Пожалуйста. Главное — чтобы было полезно.

    Reply
  8. StepByStep

    (2) pumbaE,

    Linux — не проверялось. Работаю только в Windows.

    Reply
  9. StepByStep

    (5) q_i,

    Метод Sleep действительно существует у объекта WScript.

    НО WScript существует только для скриптов, которые вызываются из командной строки,

    Объект WScript нельзя получить, используя COMОбъект.

    Следовательно надо создавать файл, скажем во временной папке, записать туда текст скрипта, а потом его выполнять, после этого — в общем случае — удалить этот файл.

    Reply
  10. q_i

    (9) понял, спасибо!

    Reply
  11. astonvilla

    Не знаю, пригодиться ли это, но не плюсануть за картинку не мог :))))))

    Reply
  12. DMSDeveloper

    Для работы со скриптами на уровне COM Используется MSScriptControl.

    В примере есть упоминание о нем.

    &НаКлиентеНаСервереБезКонтекста
    Функция ВремяВМиллисекундах()

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

    При создании объекта на 64 битном сервере 1С (Именно 1С, не Win) — объект не создается, что то там с политиками безопасности от мелкомягких. Не все 32 битные COM-ы могут быть вызваны 64 битным приложением.

    MSScriptControl — один из них 🙁

    Reply
  13. ediks

    Нисколько не уменьшая ценности публикации:

    Еще больше примеров, правда на VB, на ресурсе Разработка скриптов

    Reply
  14. SeiOkami

    Плюс!

    Автор, спасибо за примеры в контексте 1С. Напиши, пожалуйста, статью с бОльшим количеством примеров =)

    Reply
  15. StepByStep

    (13) ediks,

    Спасибо. Надо будет посмотреть.

    Reply
  16. StepByStep

    (14) SeiOkami,

    Статья обязательно пополнится примерами.

    Есть еще определенные «вещички» …

    Reply
  17. StepByStep

    (11) astonvilla,

    Мне тоже картинка понравилась ………

    Reply
  18. KliMich

    Спасибо! Очень полезно! Хотелось бы продолжения (часть 2, часть 3 и т.д.).

    Reply
  19. Stamper

    однозначно плюс. жаль, нельзя второй поставить за картинку — просто ураган 🙂

    Reply
  20. StepByStep

    (18) KliMich,

    ЕСТЬ ПРОДОЛЖЕНИЕ !

    Reply
  21. mzelensky

    Супер, сенкс!

    Reply
  22. zarucheisky

    Автору стоило бы знать что большинство, что понаписано реализуется самой платформой не хуже.

    Да и есть старый, добрый

    http://www.script-coding.com

    Reply
  23. StepByStep

    (22) zarucheisky,

    Определенные — да.

    Ссылка на старый-добрый http://www.script-coding.com была ранее 13. ediks

    Reply
  24. StepByStep

    Добавлена новая функция СетевоеОкружение().

    Reply
  25. StepByStep

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

    1. SetDateTime() — Установка системных Даты и Времени.

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

    Reply
  26. StepByStep

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

    Reply
  27. StepByStep

    Добавлены:

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

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

    Reply
  28. StepByStep

    Добавлено пояснение по настройке и проверке работы Windows Management Instrumentation — Инструментарий управления Windows.

    Reply
  29. StepByStep

    Добавлены 2 новые функции: ServerSession и ServerConnection.

    Reply
  30. yuraos

    Спасибо автору!

    Недавно озадачился, как можно в 1с8.х засечь время выполнения в коде миллесекундах.

    И вот нашел здесь один из способов.

    Reply
  31. yuraos

    (30)

    еще раз спасибо — реально пригодилось!

    теперь могу засекать время выполнения запросов с точностью до миллисекунды.



    проблемка с другой процедуркой:

    SendKeys(KEYS_ENG = «#k8SjZc9Dxk+z», KEYS_RUS = «#k8SjZc9Dxk+я»)

    Пытаюсь имитировать вызов на редактирование поля ввода в форме по клавише ‘F4’

    (смотри код ниже) — ничего выходит (тип редактируемого значения — «СписокЗначений»).

    Процедура SendKeys(KEYS_ENG = «#k8SjZc9Dxk+z», KEYS_RUS = «#k8SjZc9Dxk+я»)
    Если ПустаяСтрока(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» — #k8SjZc9Dxk;
    // «Alt» — %.
    // Если возникнет необходимость передать специальные символы именно как символы, а не команды,
    // нужно заключать их в фигурные скобки, например {+}.
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    КонецПроцедуры
    
    Процедура СписокНомеровПС_КонтМенюИзменить(Кнопка)
    Если ЭтаФорма.ТекущийЭлемент <> ЭлементыФормы.СписокНомеровПС Тогда
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.СписокНомеровПС;
    КонецЕсли;
    SendKeys(«F4″,»F4»);
    КонецПроцедуры
    
    

    Показать

    Reply
  32. StepByStep

    (31) yuraos,

    Пожалуйста. Рад, что Вам пригодилось.

    По поводу Вашего вопроса:

    Некоторые специальные символы следует всегда задавать заключёнными в фигурные скобки.

    В частности и F4:

    SendKeys(«{F4}»,»{F4}»);

    Попробуйте.

    Удачи.

    Reply
  33. yuraos

    (32)

    у щайтан-скобка!

    SendKeys(«{F4}»,»{F4}») — проканало.

    спасибо огромное!!!

    А нет в Windows Script Host каких-нибудь объектов,

    которые позволили бы в 1С через подписку на события

    перехватывать обработку ввода с мыши и клавиатуры?

    Reply
  34. StepByStep

    (33) yuraos,

    WSH — это работа в командной строке.

    И опции типа SendKeys — это скорее приятные полезности.

    Ответ: нет.

    Reply
  35. StepByStep

    Добавлены новые функции: Computer_Processor(), Computer_RAM(), Computer_TotalPhysicalMemory(), Computer_VirtualMemory().

    Reply
  36. StepByStep

    Добавлены новые функции: Computer_Motherboard() и Computer_Video().

    Reply
  37. StepByStep

    Добавлены функции Computer_UserList(), Computer_GroupList(), Computer_GroupUsersList(), Computer_BuildINAdministrator().

    Reply
  38. soli_M_x6

    —-

    Reply
  39. yuraos

    (33)

    иище раз о ВремяВМиллисекундах():

    В каких ситуациях в функции может сработать исключение и

    вместо миллисекунд функция вернет 1С-ное текущее время-дату ???

    PS:

    В своем варианте по исключению я возвращаю значение:

    1000*(ТекущаяДата() — ‘1970-01-01:06:00:00’)

    как более подходящее по смыслу — округленное до целых секунд число миллисекунд.

    06:00:00 — это наверное из-за разницы времени между Новосибирском и Гринвичем.

    Reply
  40. Матрос

    Полезно.

    Reply
  41. OVladius

    Круто!

    Reply
  42. StepByStep

    (39) yuraos,

    В каких ситуациях в функции может сработать исключение и

    вместо миллисекунд функция вернет 1С-ное текущее время-дату ???

    При тестировании на 32-битных системах «Исключение» не вызывалось.

    Возможно ситуация, описанная (12) DMSDeveloper.

    Reply
  43. StepByStep

    Добавлены функции: Computer_SystemService(), Computer_SystemProcess(), Computer_EventsList()

    Reply
  44. StepByStep

    Добавлены функции: Computer_KillProccess(), Computer_RebootShutdown().

    Reply
  45. StepByStep

    Добавлена функция: Computer_PING(), позволяющая невизуально «пропинговать» удаленный компьютер.

    Reply
  46. StepByStep

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

    Reply
  47. q_i

    (4) pumbaE, на сервере ЗапуститьПриложение().

    Reply
  48. slaviksoft

    при вызове Win32Shutdown с флагами отличными от 0 — ничего не происходит

    или я что-то не так делаю

    Пример:

     WinMGMT = ПолучитьCOMОбъект(«winmgmts:\.
    ootcimv2»);
    Win32_OS = WinMGMT.ExecQuery(«SEL ECT * FR OM Win32_OperatingSystem where Primary=true»);
    
    Reserved = 0;   // Зарезервированный параметр. Игнорируется.
    Для Каждого OS ИЗ Win32_OS Цикл
    OS.Win32Shutdown(6, Reserved);
    КонецЦикла;
    Reply
  49. StepByStep

    (48) slaviksoft,

    Какая у Вас операционка ?

    Reply
  50. StepByStep

    23.09.2013 г.

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

    Computer_WindowsInfo()

    Computer_Monitor()

    Computer_PhysicalMemory()

    Reply
  51. StepByStep

    (48) slaviksoft,

    СПАСИБО.

    Вместо строчки:

    WinMGMT = ПолучитьCOMОбъект(«winmgmts:\.
    ootcimv2»); 

    Необходимо:

    WinMGMT = ПолучитьCOMОбъект(«winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\» + Computer + »
    ootcimv2″);

    Проверил на Windows XP x32 и Windows 7 x64.

    Reply
  52. echo77

    Функция NetworkNeighborhood() ничего не возвращает в ОС старше Win-XP

    Reply
  53. StepByStep

    (52) echo77,

    Да. Вы правильно указали.

    В обработке 1С:Администратор http://infostart.ru/public/172189/ получение сетевого окружения переработано и дополнено для Windows Vista и выше.

    Позднее подправлю статью.

    СПАСИБО.

    Reply
  54. StepByStep

    07.10.2013.

    Функция Computer_MAC_IP() заменена на функцию Computer_NetworkAdapter().

    Reply
  55. MarSeN

    StepByStep,

    А в каком случае SendKey может использоваться на сервере? К процедуре указана директива &НаКлиентеНаСервереБезКонтекста.

    Я там понимаю, что для сендкея обязательно нужно открытое окно приложения и тем более открытая сессия (нормальная сессия с рабочим столом и т.п.), а на сервере такого вроде 1С сервер не создает?

    Reply
  56. StepByStep

    (55) MarSeN,

    Согласен с Вами, «физического» смысла это не имеет.

    Reply
  57. ЧИА

    проснулся в 5 утра, полазил по сайту, через рекламу и косвенные ссылки попал сюда, решил сохранить, а вот коммент (11) astonvilla, вначале не понял.

    пересмотрел внизу картинки, почесал голову, поработал, еще раз пересмотрел

    догадался посмотреть вверху

    ржал минут 5

    плюсую

    Reply
  58. Voittamaton

    Почему-то не получается отправить символы с цифровой клавиатуры.

    Нижеперечисленные варианты (также без скобок «()») приводят к ошибке «Произошла исключительная ситуация (0x80070057)».

    1)

    Ws = Новый COMОбъект(«Wscript.shell»);
    Ws.SendKeys(«#k8SjZc9Dxk+({Pad-})»);

    2)

    Ws = Новый COMОбъект(«Wscript.shell»);
    Ws.SendKeys(«#k8SjZc9Dxk+({Subtract})»);
    Reply
  59. mzelensky

    Доброго времени суток! Подскажите плиз. Юзаю одну из ваших функций

    Computer_GroupUsersList(

    Она возвращает имя группы и имя пользователя. Можно ли как-то получить «полное имя пользователя» ну или как это назвать ПРЕДСТАВЛЕНИЕ. Т.е. то Имя, которое отображается у пользователя, если нажать кнопку «Пуск». Например имя пользователя может быть «Zelensky» а полное имя «Зеленский Максим». Вот мне нужно как-то получить это полное имя.

    Reply
  60. StepByStep

    (59) mzelensky,

    Функция Computer_UserList() возвращает таблицу значений, в которой есть FullName.

    Reply
  61. StepByStep

    (58) Voittamaton,

    SendKeys(«#k8SjZc9Dxk+{SUBTRACT}»); — Ошибки не вызвало.

    Reply
  62. StepByStep

    14.01.2015.

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

    ПреобразоватьИзСтрокиВДату() — Ф., возвращающая результат преобразования строкового значения даты в значение в формате даты.

    Reply
  63. simple

    спасибо!

    Reply
  64. CaSH_2004

    Подскажите кто сталкивался, как решить проблему такую: пытаюсь получить список пользователей на удаленном сервере, так вот с одними серверами происходит нормально, а на одном не выполняет даже инициализацию: ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
    ootcimv2″);

    сначала ругался «Ошибка получения объекта COM: Сервер RPC недоступен.»

    Почитал тут что брэндмауэр нужно настраивать, пробовал но не помогало и я его вообще отключил, теперь ругается «Ошибка получения объекта COM: Отказано в доступе.»

    Reply
  65. _1c_coder

    Подскажите как с помощью даного скрипта емулировать нажатие на маленькой клавиатуре NUM + и NUM —

    так ошибка http://prntscr.com/gri3o7

    ОбъектShell = Новый COMОбъект(«Wscript.Shell»);
    ОбъектShell.SendKeys(«{Add}»);
    ОбъектShell.SendKeys(«{Subtract}»);
    

    нужно когда картинка активизирована на форме кнопкой УМЕНЬШИТЬ УВЕЛИЧИТЬ менять масштаб

    просто нажатие + и — работает,

    ПОМОГИТЕ ЗНАТОКИ!!!!!!!!!!!

    Reply
  66. forusing

    (65) Для тех, кто долго искал как программно «нажать» Ctrl+Shift+{+} (развернуть все ветки; актуально для таблицы формы, представленной в виде дерева по произвольному запросу с группировкой). Работает следующий код:

    objShell = Новый COMОбъект( «WScript.Shell» );
    objShell.SendKeys( «#k8SjZc9Dxk+» + Символ( 107 ) );
    
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *