Опубликован: 12.01.2008 | Уровень: специалист | Доступ: свободно
Лекция 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 >
Валентина Тюрина
Валентина Тюрина
Нажатие кнопок в сторонних программах
Александр Тагильцев
Александр Тагильцев
Где проводится профессиональная переподготовка?
Анатолий Федоров
Анатолий Федоров
Россия, Москва
Игорь Ермачков
Игорь Ермачков
Латвия, Рига