Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Сценарии WSH для доступа к службе каталогов АDSI
Удаление пользователя и группы на рабочей станции
Для удаления созданных с помощью сценариев AddUser.vbs и AddGroup.vbs пользователя XUser и группы XGroup, мы создадим сценарий DelUserAndGroup.vbs, который представлен в листинге 8.5.
Замечание
Для удаления пользователя или группы у вас в системе должны быть назначены права, которыми обладает администратор.
В принципе, удалить пользователя и группу так же просто, как и создать — нужно связаться с объектом Computer:
Set objComputer = GetObject("WinNT://Popov")
и вызвать метод Delete, указав в качестве первого параметра класс объекта, который мы хотим удалить, и в качестве второго параметра — имя этого объекта:
' Удаляем пользователя
objComputer.Delete "user", strUser
Однако здесь могут возникнуть ошибки (например, мы не запускали предварительно сценарий AddUser.vbs и у нас на компьютере не зарегистрирован пользователь, которого мы хотим удалить). Поэтому в сценарии DelUserAndGroup.vbs предусмотрена обработка исключительных ситуаций с помощью стандартного объекта Err:
If Err.Number <> 0 Then strMess="Ошибка при удалении пользователя " & strUser & vbCrLf & _ "Код ошибки: " & Err.number & "Описание: " & Err.description WshShell.Popup strMess,0,"Удаление пользователя",vbCritical ' Очищаем свойства объекта Err Err.Clear Else ' Все в порядке strMess = "Пользователь " & strUser & " удален" WshShell.Popup strMess,0,"Удаление пользователя",vbInformation End If
Как мы видим, если при вызове метода Delete произойдет какая-либо ошибка, то на экран с помощью метода Popup объекта WshShell выведется соответствующее сообщение. Если же удаление прошло успешно (свойство Number объекта Err равно нулю), то на экран также выведется соответствующее диалоговое окно.
Процесс удаления группы в сценарии проходит аналогично.
'******************************************************************** ' Имя: DelUserAndGroup.vbs ' Язык: VBScript ' Описание: Удаление пользователя и группы компьютера '******************************************************************** Option Explicit On Error Resume Next 'Объявляем переменные Dim objComputer ' Экземпляр объекта Computer Dim strUser ' Имя удаляемого пользователя Dim strGroup ' Имя удаляемой группы Dim WshShell ' Объект WshShell Dim strMess Строка для вывода на экран '********************** Начало ************************************* ' Имя удаляемого пользователя strUser = "XUser" ' Имя удаляемой группы strGroup = "XGroup" ' Связываемся с компьютером Popov Set objComputer = GetObject("WinNT://Popov") ' Создаем объект WshShell Set WshShell = WScript.CreateObject("WScript.Shell") '************* Удаление пользователя *********************** ' Удаляем пользователя objComputer.Delete "user", strUser ' Обрабатываем ошибки If Err.Number <> 0 Then strMess="Ошибка при удалении пользователя " & strUser & vbCrLf & _ "Код ошибки: " & Err.number & "Описание: " & Err.description WshShell.Popup strMess,0,"Удаление пользователя",vbCritical ' Очищаем свойства объекта Err Err.Clear Else ' Все в порядке strMess = "Пользователь " & strUser & " удален" WshShell.Popup strMess,0,"Удаление пользователя",vbInformation End If '************* Удаление группы ***********************/ objComputer.Delete "group", strGroup ' Обрабатываем ошибки If Err.Number <> 0 Then strMess="Ошибка при удалении группы " & strGroup & vbCrLf & _ "Код ошибки: " & Err.number & "Описание: " & Err.description ' Очищаем свойства объекта Err Err.Clear Else ' Все в порядке strMess="Группа " & strGroup & " удалена" WshShell.Popup strMess,0,"Удаление группы",vbInformation End If '************* Конец *********************************************/Листинг 8.5. Удаление пользователя и группы на рабочей станции
Список всех групп на рабочей станции
Принцип формирования списка всех групп рабочей станции остается тем же, что и для рассмотренного выше списка всех доступных доменов локальной сети, однако первоначальное связывание нужно производить не с корневым объектом класса Namespace, а с нужным объектом класса Computer.
В приведенном в листинге 8.6 сценарии ListAllGroups.vbs для связывания с компьютером Popov мы создаем объект-контейнер objComputer, в котором содержатся все объекты рабочей станции Popov:
Set objComputer = GetObject("WinNT://Popov")
Затем в сценарии инициализируется переменная strResult, в которой будет храниться список всех локальных групп рабочей станции:
strResult = "На компьютере Popov созданы группы:" & vbCrLf & vbCrLf
После этого в цикле For Each … In … из коллеции objComputer выбираются лишь объекты класса Group, то есть те объекты, у которых в поле Class записана строка "Group"; в strResult заносятся названия групп из поля Name:
For Each objGroup In objComputer ' Выделяем объекты класса Group If objGroup.Class = "Group" Then 'Формируем строку с именами групп strResult = strResult & objGroup.Name & vbCrLf End If Next
После окончания цикла сформированная строка выводится на экран.
'******************************************************************** ' Имя: ListAllGroups.vbs ' Описание: Вывод на экран имен всех групп заданного компьютера '******************************************************************** Option Explicit 'Объявляем переменные Dim objComputer ' Экземпляр объекта Computer Dim objGroup ' Экземпляр объекта Group Dim strResult ' Строка для вывода на экран '********************** Начало ************************************* ' Связываемся с компьютером Popov Set objComputer = GetObject("WinNT://Popov") strResult = "На компьютере Popov созданы группы:" & vbCrLf & vbCrLf ' Перебираем элементы коллекции For Each objGroup In objComputer ' Выделяем объекты класса Group If objGroup.Class = "Group" Then 'Формируем строку с именами групп strResult = strResult & objGroup.Name & vbCrLf End If Next 'Выводим информацию на экран WScript.Echo strResult '************* Конец *********************************************/Листинг 8.6. Вывод на экран имен всех локальных групп заданной рабочей станции
Список всех пользователей в группе
В листинге 8.7 приведен сценарий ListUsers.vbs, в котором формируется список всех пользователей, входящих в группу "Пользователи" на компьютере Popov.
Для связывания с группой "Пользователи" рабочей станции Popov создается объект objGroup ; коллекция пользователей этой группы формируется с помощью метода Members объекта Group:
Set objGroup = GetObject("WinNT://Popov/Пользователи,group")
После инициализации переменной strResult мы обрабатываем в цикле For Each … In … все элементы полученной коллекции пользователей группы (данная коллекция формируется с помощью метода Members объекта Group ); на каждом шаге цикла к переменной strResult добавляется имя текущего пользователя (поле Name в объекте objUser — текущем элементе коллекции):
strResult = "Все пользователи группы Пользователи на компьютере Popov:" & vbCrLf ' Перебираем элементы коллекции For Each objUser In objGroup.Members() ' Формируем строку с именами пользователей strResult = strResult & objUser.Name & vbCrLf Next
После выхода из цикла сформированная строка strResult выводится на экран.
'******************************************************************** ' Имя: ListUsers.vbs ' Язык: VBScript ' Описание: Вывод на экран имен всех пользователей заданной группы '******************************************************************** Option Explicit 'Объявляем переменные Dim objGroup ' Экземпляр объекта Group Dim objUser ' Экземпляр объекта User Dim strResult ' Строка для вывода на экран '********************** Начало ************************************* ' Связываемся с группой Пользователи компьютера Popov Set objGroup = GetObject("WinNT://Popov/Пользователи,group") strResult = "Все пользователи группы Пользователи на компьютере Popov:" & vbCrLf ' Перебираем элементы коллекции For Each objUser In objGroup.Members() ' Формируем строку с именами пользователей strResult = strResult & objUser.Name & vbCrLf Next ' Вывод информации на экран WScript.Echo strResult '************* Конец *********************************************Листинг 8.7. Вывод на экран имен всех пользователей заданной группы