|
Вопрос по лекции 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.
Вывод на экран имен всех пользователей заданной группы