Мордовский государственный университет имени Н.П. Огарева
Опубликован: 12.01.2008 | Доступ: свободный | Студентов: 8757 / 1453 | Оценка: 4.48 / 4.12 | Длительность: 18:38:00
Лекция 8:

Сценарии WSH для доступа к службе каталогов АDSI

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Удаление пользователя и группы на рабочей станции

Для удаления созданных с помощью сценариев 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. Вывод на экран имен всех пользователей заданной группы
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.