Предыдущие:
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть I: //infostart.ru/public/165702/
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II: //infostart.ru/public/166391/
Практическая реализация:
Обработка 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
ПРАКТИКА
// Корневые ключи реестра и их сокращения:
// HKEY_CURRENT_USER - HKCU
// HKEY_LOCAL_MACHINE - HKLM
// HKEY_CLASSES_ROOT - HKCR
// HKEY_USERS - HKEY_USERS
// HKEY_CURRENT_CONFIG - HKEY_CURRENT_CONFIG
Список процедур и функций:- ЗарегистрироватьФайлDLL() - Ф., позволяющая зарегистрировать файл типа DLL.- УстановленаПрограмма() - Ф., позволяющая проверить установлена/не установлена программа.- Computer_Programs_Product() - Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (WMI).- Computer_Programs_Registry() - Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (REGISTRY).- ИзменитьСтартовуюСтраницуInternetExplorer() - Ф., позволяющая изменить стартовую страницу Internet Explorer лок. компьютера.- RegRead() - Ф. чтения значения ключа или группы из системного реестра.- RegWrite() - Ф. создания в системном реестре ключа или группы.- RegDelete() - Ф. удаления ключа или группы из системного реестра.- Computer_RegistryInformation() - Ф., позволяющая получить информацию о реестре лок./уд. компьютера, в т.ч. дату установки Windows.- Computer_Description() - Ф., позволяющая записать в описание лок./уд. компьютера имя домена\пользователя, работающего на нем.- WindowsInfo() - Ф., позволяющая получить информацию об установленной Windows на лок. компьютере.- get_windows_key_via_reg_wmi.vbs. VBS-Срипт. Получение серийного номера Windows.
// Функция, позволяющая зарегистрировать файл типа DLL.
//
// ВАЖНО:
//
// Windows User Account Control (UAC) в ОС Vista и выше
// может помешать регистрации DLL.
//
// В этом случае необходимо:
// Вручную зарегистрировать фалй от имени "Администратора":
// "C:\Documents and Settings\All Users\1С_COMObject\X.DLL"
// Отключать UAC не рекомендуется.
//
// Возвращает:
// В случае успеха - COMОбъект.
// Иначе - Неопределено.
// Параметры:
// ИмяКаталогаDLL - Относительно переменной среды %ALLUSERSPROFILE%.
// ИмяФайлаDLL - Короткое имя файла DLL.
// ИмяМакетаDLL - Имя двоичного макета объекта, в котором находится файл DLL.
// ИмяCOMОбъекта - Имя создаваемого COMОбъекта.
//
&НаСервере
Функция ЗарегистрироватьФайлDLL(ИмяКаталогаDLL = "1С_COMObject" , ИмяФайлаDLL = "X.DLL", ИмяМакетаDLL = "XY", ИмяCOMОбъекта = "XYZ")
ЭтотОбъект = РеквизитФормыВЗначение("Объект");
ALLUSERSPROFILE = Неопределено;
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv = WshShell.Environment("Process");
ALLUSERSPROFILE = WshSysEnv.Item("ALLUSERSPROFILE");
Исключение
Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КаталогDLL = Новый Файл(ALLUSERSPROFILE + "\" + ИмяКаталогаDLL);
Если НЕ КаталогDLL.Существует() Тогда
Попытка
СоздатьКаталог(КаталогDLL.ПолноеИмя);
Исключение
Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
ИмяФайлаDLL = КаталогDLL.ПолноеИмя + "\" + ИмяФайлаDLL;
ФайлDLL = Новый Файл(ИмяФайлаDLL);
Если НЕ ФайлDLL.Существует() Тогда
Попытка
МакетDLL = ЭтотОбъект.ПолучитьМакет(ИмяМакетаDLL);
МакетDLL.Записать(ФайлDLL.ПолноеИмя);
Исключение
Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
Попытка
// "/s" - "тихий" режим REGsvr32: Окна сообщений не отображаются.
// 0 - Без окна WshShell.
// Истина - Дождаться завершения.
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run("REGsvr32 /s " + ИмяФайлаDLL, 0, Истина);
Исключение
//Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
ЗапуститьПриложение("REGsvr32 /s " + ИмяФайлаDLL, , Истина);
КонецПопытки;
// Проверка регистрации.
НовыйCOMОбъект = ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта);
Возврат НовыйCOMОбъект;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта)
Попытка
НовыйCOMОбъект = Новый COMОбъект(ИмяCOMОбъекта);
Возврат НовыйCOMОбъект;
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат Неопределено;
КонецФункции
// Функция, позволяющая проверить установлена/не установлена программа.
// Проверяет путь в системном реестре и существование запускаемого файла для программы,
// установку которой на компьютере необходимо проверить.
// Используется функция GetFileInfo, описанная в Части II.
//
&НаКлиентеНаСервереБезКонтекста
Функция УстановленаПрограмма(Программа = "LibreOffice")
Файл = Неопределено;
Если Программа = "LibreOffice" Тогда
Файл = RegRead("HKLM\Software\LibreOffice\LibreOffice\3.6\Path");
Иначе
// Файл = ...
КонецЕсли;
Если Файл = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ПрограммаЗапуска = GetFileInfo(Файл);
Если НЕ ПрограммаЗапуска = Неопределено Тогда
// ... Дополнительная проверка при необходимости имени, размера, ....
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
// Computer - Имя компьютера.
// Возвращаемое значение:
// Таблица значений.
//
// Примечания:
// 1. Только программы, установленные с помощью Windows Installer.
// 2. Полнота информации в Windows 2000/XP/2003 ограничена.
// 3. Может не работать на 64-битных ОС.
// 4. Медленнее чтения из регистра.
//
// При запуске на на компьютере под управлением Windows Server 2003 возможна ошибка чтения данных,
// т.к. поставщик объекта Win32_Product по умолчанию в Windows Server 2003 не устаналивается.
// Установка:
// Панель управления - Установка и уделение программ - Установка компонентов Windows - Средства наблюдения и управления:
// Компонента: "Поставщик установщика Windows через WMI".
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Programs_Product(Computer = ".")
Win32_ProductInfo = Новый ТаблицаЗначений;
Win32_ProductInfo.Колонки.Добавить("Caption");
Win32_ProductInfo.Колонки.Добавить("Description");
Win32_ProductInfo.Колонки.Добавить("HelpLink");
Win32_ProductInfo.Колонки.Добавить("HelpTelephone");
Win32_ProductInfo.Колонки.Добавить("IdentifyingNumber");
Win32_ProductInfo.Колонки.Добавить("InstallDate");
Win32_ProductInfo.Колонки.Добавить("InstallLocation");
Win32_ProductInfo.Колонки.Добавить("InstallSource");
Win32_ProductInfo.Колонки.Добавить("InstallState");
Win32_ProductInfo.Колонки.Добавить("Language");
Win32_ProductInfo.Колонки.Добавить("LocalPackage");
Win32_ProductInfo.Колонки.Добавить("Name");
Win32_ProductInfo.Колонки.Добавить("PackageCache");
Win32_ProductInfo.Колонки.Добавить("PackageCode");
Win32_ProductInfo.Колонки.Добавить("PackageName");
Win32_ProductInfo.Колонки.Добавить("ProductID");
Win32_ProductInfo.Колонки.Добавить("RegCompany");
Win32_ProductInfo.Колонки.Добавить("RegOwner");
Win32_ProductInfo.Колонки.Добавить("SKUNumber");
Win32_ProductInfo.Колонки.Добавить("Transforms");
Win32_ProductInfo.Колонки.Добавить("URLInfoAbout");
Win32_ProductInfo.Колонки.Добавить("URLUpdateInfo");
Win32_ProductInfo.Колонки.Добавить("Vendor");
Win32_ProductInfo.Колонки.Добавить("Version");
Попытка
WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
Win32_Product = WinMGMT.ExecQuery("SELECT * FROM Win32_Product");
Для Каждого Product ИЗ Win32_Product Цикл
ProductInfo = Win32_ProductInfo.Добавить();
ProductInfo
Вступайте в нашу телеграмм-группу Инфостарт