Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Типичные администраторские сценарии WMI
Типичные администраторские сценарии WMI
Мы рассмотрим несколько простых сценариев WMI, которые могут оказаться полезными при решении определенной задачи администратора Windows (удаленное управление работой рабочих станций, централизованная инвентаризация установленного на компьютерах оборудования и т. д.). Поняв принцип их работы, можно по аналогии составлять сценарии, работающие с другими компонентами информационной системы (естественно, при этом нужно знать, какие именно объекты WMI соответствуют тому или иному компоненту системы, и какие свойства и методы этих объектов следует задействовать в сценарии).
Управление компьютером
В листингах 13.1–13.3 приведены сценарии, которые с помощью соответствующих методов класса Win32_OperatingSystem позволяют принудительно завершить сеанс активного пользователя, перезагрузить или выключить компьютер.
Завершение сеанса пользователя
Для завершения сеанса активного пользователя необходимо вызвать метод Win32Shutdown объекта Win32_OperatingSystem (листинг 13.1).
'******************************************************************* ' Имя: LogOff.vbs ' Язык: VBScript ' Описание: Завершение сеанса пользователя '******************************************************************* Option Explicit ' Объявляем переменные Dim strComputer ' Имя компьютера Dim strNamespace ' Имя пространства имен Dim strClass ' Имя класса Dim objClass ' Объект SWbemObject (класс WMI) Dim colInstances ' Коллекция экземпляров класса WMI Dim objInstance ' Элемент коллекции '********************** Начало ************************************* ' Присваиваем начальные значения переменным strComputer = "." strNamespace = "Root\CIMV2" strClass = "Win32_OperatingSystem" ' Получаем указатель на класс WMI Set objClass = GetObject("WinMgmts:\\" & strComputer & _ "\" & strNamespace & ":" & strClass) ' Создаем коллекцию экземпляров класса Win32_OperatingSystem Set colInstances = objClass.Instances_ ' Перебираем элементы коллекции For Each objInstance In colInstances ' Выводим на экран предупреждение WScript.Echo "На компьютере " & objInstance.CSNAME & VbCrLf &_ "сеанс текущего пользователя будет завершен " ' Для каждого экземпляра вызываем метод Win32Shutdown objInstance.Win32Shutdown(0) Next '************************* Конец ***********************************Листинг 13.1. Завершение сеанса пользователя
Перезагрузка компьютера
Для перезагрузки компьютера необходимо использовать метод Reboot объекта Win32_OperatingSystem (листинг 13.2). При этом при подключении к подсистеме WMI необходимо указать дополнительные привилегии Shutdown (для перезагрузки локального компьютера) и RemoteShutdown (для перезагрузки удаленного компьютера).
'******************************************************************* ' Имя: Reboot.vbs ' Язык: VBScript ' Описание: Перезагрузка компьютера '******************************************************************* Option Explicit ' Объявляем переменные Dim strComputer ' Имя компьютера Dim strNamespace ' Имя пространства имен Dim strClass ' Имя класса Dim objClass ' Объект SWbemObject (класс WMI) Dim colInstances ' Коллекция экземпляров класса WMI Dim objInstance ' Элемент коллекции '********************** Начало ************************************* ' Присваиваем начальные значения переменным strComputer = "." strNamespace = "Root\CIMV2" strClass = "Win32_OperatingSystem" ' Получаем указатель на класс WMI Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" &_ strComputer & "\" & strNamespace & ":" & strClass) ' Создаем коллекцию экземпляров класса Win32_OperatingSystem Set colInstances = objClass.Instances_ ' Перебираем элементы коллекции For Each objInstance In colInstances ' Выводим на экран предупреждение WScript.Echo "Компьютер " & objInstance.CSNAME &_ " будет перезагружен " ' Для каждого экземпляра вызываем метод Reboot objInstance.Reboot() Next '************************* Конец ***********************************Листинг 13.2. Перезагрузка компьютера
Выключение компьютера
В сценарии Shutdown.vbs (листинг 13.3) кроме непосредственного выключения компьютера (метод Shutdown объекта Win32_OperatingSystem ) с помощью средств языка VBScript реализована обработка возможных ошибок.
'******************************************************************* ' Имя: Shutdown.vbs ' Язык: VBScript ' Описание: Выключение компьютера '******************************************************************* Option Explicit On Error Resume Next ' Объявляем переменные Dim strComputer ' Имя компьютера Dim strNamespace ' Имя пространства имен Dim strClass ' Имя класса Dim objClass ' Объект SWbemObject (класс WMI) Dim colInstances ' Коллекция экземпляров класса WMI Dim objInstance ' Элемент коллекции Dim iAnswer ' Код возврата функции MsgBox '********************** Начало ************************************* ' Присваиваем начальные значения переменным strComputer = "." strNamespace = "Root\CIMV2" strClass = "Win32_OperatingSystem" ' Получаем указатель на класс WMI Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" & strComputer & _ "\" & strNamespace & ":" & strClass) ' Создаем коллекцию экземпляров класса Win32_OperatingSystem Set colInstances = objClass.Instances_ ' Перебираем элементы коллекции For Each objInstance In colInstances ' Выводим на экран предупреждение iAnswer = MsgBox("Выключить компьютер " & objInstance.CSNAME & " ?", _ vbQuestion + vbOKCancel, "Внимание!") If iAnswer = vbOK Then ' Выводим сообщение о перезагрузке WScript.Echo "Компьютер " & objInstance.CSNAME & " будет выключен" ' Вызываем метод Shutdown objInstance.Shutdown() If Err.number <> 0 Then WScript.Echo "Номер ошибки: " & Err.Number & vbNewLine & _ "Описание: " & Err.Description End If Else ' Выводим сообщение об отмене операции WScript.Echo "Не будем пока выключать" End if Next '************************* Конец ***********************************Листинг 13.3. Выключение компьютера
Получение и анализ системной информации
Листинги 13.4–13.7 содержат сценарии, позволяющие получить информацию об операционной системе (серийный номер, номер сборки, номер последнего обновления, дата установки, кодовая страница, список команд, которые выполняются автоматически при старте системы, и т. д.) и о BIOS компьютера (производитель, серийный номер, номер сборки и т. д.).
Вывод информации о BIOS
В сценарии BIOSInfo.vbs (листинг 13.4) на экран выводятся некоторые свойства объекта Win32_BIOS, в котором хранятся параметры и характеристики BIOS, установленной на компьютере.
'******************************************************************* ' Имя: BIOSInfo.vbs ' Язык: VBScript ' Описание: Вывод информации о BIOS '******************************************************************* Option Explicit ' Объявляем переменные Dim strComputer ' Имя компьютера Dim strNamespace ' Имя пространства имен Dim strClass ' Имя класса Dim objClass ' Объект SWbemObject (класс WMI) Dim colInstances ' Коллекция экземпляров класса WMI Dim objBIOS ' Элемент коллекции Dim strResult ' Результирующая строка '********************** Начало ************************************* ' Присваиваем начальные значения переменным strComputer = "." strNamespace = "Root\CIMV2" strClass = "Win32_BIOS" strResult = "Информация о BIOS :" & VbCrLf ' Получаем указатель на класс WMI Set objClass = GetObject("winmgmts:\\" & strComputer & _ "\" & strNamespace & ":" & strClass) ' Создаем коллекцию экземпляров класса Win32_BIOS Set colInstances = objClass.Instances_ ' Перебираем элементы коллекции For Each objBIOS in colInstances strResult = strResult & "Name: " & objBIOS.Name & VbCrLf strResult = strResult & "Manufacturer: " & objBIOS.Manufacturer &_ VbCrLf strResult = strResult & "Caption: " & objBIOS.Caption & VbCrLf strResult = strResult & "Description: " & objBIOS.Description & VbCrLf strResult = strResult & "Build Number: " & objBIOS.BuildNumber & VbCrLf strResult = strResult & "Current Language: " & objBIOS.CurrentLanguage & VbCrLf strResult = strResult & _ "Installable Languages: " & objBIOS.InstallableLanguages & VbCrLf strResult = strResult & "Primary BIOS: " & objBIOS.PrimaryBIOS & VbCrLf strResult = strResult & "Release Date: " & objBIOS.ReleaseDate & VbCrLf strResult = strResult & "Serial Number: " & objBIOS.SerialNumber & VbCrLf strResult = strResult & "SMBIOS Version: " & _ objBIOS.SMBIOSBIOSVersion & VbCrLf strResult = strResult & _ "SMBIOS Major Version: " & objBIOS.SMBIOSMajorVersion & VbCrLf strResult = strResult & _ "SMBIOS Minor Version: " & objBIOS.SMBIOSMinorVersion & VbCrLf strResult = strResult & "SMBIOS Present: " & objBIOS.SMBIOSPresent _ & VbCrLf strResult = strResult & "Status: " & objBIOS.Status & VbCrLf strResult = strResult & "Version: " & objBIOS.Version & VbCrLf Next 'Выводим строку на экран Wscript.Echo strResult '************************* Конец ***********************************Листинг 13.4. Вывод информации о BIOS