Опубликован: 12.01.2008 | Уровень: специалист | Доступ: свободно | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 8:

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

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

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

В сценарии AddUser.vbs, который приведен в листинге 8.2, для создания нового пользователя на рабочей станции выполняются следующие шаги. Во-первых, производится связывание с нужным компьютером (в нашем примере это рабочая станция с именем Popov), то есть создается экземпляр objComputer объекта Computer:

Set objComputer = GetObject("WinNT://Popov")

Во-вторых, создается экземпляр UserObj объекта User для нового пользователя. Для этого используется метод Create() объекта Computer ; в качестве параметров этого метода указывается имя класса "user" и имя создаваемого пользователя (в нашем примере это имя хранится в переменной strUser ):

Set objUser = objComputer.Create("user",strUser)

Замечание

Для создания пользователя или группы у вас в системе должны быть назначены права, которыми обладает администратор.

Для созданного пользователя в свойство Description мы помещаем текст описания:

UserObj.Description="Этот пользователь создан из сценария ADSI"

Для сохранения информации о новом пользователе в базе данных пользователей вызывается метод SetInfo объекта User.

'********************************************************************
' Имя: AddUser.vbs                                                  
' Язык: VBScript                                                    
' Описание: Создание нового пользователя компьютера                
'********************************************************************
Option Explicit

'Объявляем переменные
Dim objComputer        ' Экземпляр объекта Computer
Dim objUser            ' Экземпляр объекта User
Dim strUser            ' Имя создаваемого пользователя

' Задаем имя пользователя
strUser = "XUser"
' Связываемся с компьютером Popov
Set objComputer = GetObject("WinNT://Popov")
' Создаем объект класса User
Set objUser = objComputer.Create("user",strUser)
' Добавляем описание созданного пользователя
objUser.Description = "Этот пользователь создан из сценария ADSI"

' Сохраняем информацию на компьютере
objUser.SetInfo
'*************  Конец *********************************************
Листинг 8.2. Создание нового локального пользователя на рабочей станции

Группа на рабочей станции создается аналогичным образом (листинг 8.3).

'********************************************************************
' Имя: AddGroup.vbs                                                  
' Язык: VBScript                                                    
' Описание: Создание новой группы на компьютере
'********************************************************************
Option Explicit

'Объявляем переменные
Dim objComputer        ' Экземпляр объекта Computer
Dim objGroup           ' Экземпляр объекта Group
Dim strGroup           ' Имя создаваемой группы

' Задаем имя пользователя
strGroup = "XGroup"
' Связываемся с компьютером Popov
Set objComputer = GetObject("WinNT://Popov")
' Создаем объект класса Group
Set objGroup = objComputer.Create("group",strGroup)
' Сохраняем информацию на компьютере
objGroup.SetInfo
'*************  Конец *********************************************
Листинг 8.3. Создание новой локальной группы на рабочей станции

Вывод информации о пользователе и смена его пароля

В листинге 8.4 приведен сценарий UserInfo.vbs, в котором выводится на экран информация о созданном в сценарии AddUser.vbs пользователе XUser. Для получения этой информации мы производим связывание с нужным пользователем, т.е. создаем экземпляр objUser объекта User и читаем данные из полей этого объекта:

' Связываемся с пользователем XUser компьютера Popov
Set objUser = GetObject("WinNT://Popov/XUser,user")
' Формируем строку с информацией о пользователе
strResult = "Информация о пользователе XUser" & vbCrLf &_
        "Имя: " & objUser.Name & vbCrLf & _
        "Описание: " & objUser.Description & vbCrLf
' Выводим сформированную строку на экран
WScript.Echo strResult

После этого в сценарии выдается запрос на изменение пароля пользователя XUser. Для этого мы используем метод Popup() объекта WshShell:

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' Запрос на изменение пароля
Res = WshShell.Popup("Изменить пароль у XUser?",0,_
  "Администрирование пользователей",vbQuestion+vbYesNo)

В случае утвердительного ответа пароль изменяется с помощью метода SetPassword объекта User, после чего все произведенные изменения сохраняются на рабочей станции с помощью метода SetInfo:

If Res=vbYes Then ' Нажата кнопка Да
  ' Устанавливаем новый пароль
  objUser.SetPassword "NewPassword"
  ' Сохраняем сделанные изменения
  objUser.SetInfo
'********************************************************************
' Имя: UserInfo.vbs                                                 
' Язык: VBScript                                                    
' Описание: Вывод информации о пользователе компьютера и смена     
'           его пароля                                             
'********************************************************************
Option Explicit

'Объявляем переменные
Dim objUser      ' Экземпляр объекта User
Dim WshShell     ' Объект WshShell
Dim Res          ' Результат нажатия кнопки в диалоговом окне
Dim strPassword  ' Строка с новым паролем
Dim strResult    ' Строка для вывода на экран

'********************** Начало *************************************
' Связываемся с пользователем XUser компьютера Popov
Set objUser = GetObject("WinNT://Popov/XUser,user")
' Формируем строку с информацией о пользователе
strResult = "Информация о пользователе XUser" & vbCrLf &_
        "Имя: " & objUser.Name & vbCrLf & _
        "Описание: " & objUser.Description & vbCrLf
' Выводим сформированную строку на экран
WScript.Echo strResult

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' Запрос на изменение пароля
Res = WshShell.Popup("Изменить пароль у XUser?",0,_
  "Администрирование пользователей",vbQuestion+vbYesNo)
If Res=vbYes Then ' Нажата кнопка Да
  ' Устанавливаем новый пароль
  objUser.SetPassword "NewPassword"
  ' Сохраняем сделанные изменения
  objUser.SetInfo
  WScript.Echo "Пароль был изменен"
Else
  WScript.Echo "Вы отказались от изменения пароля"
End If  
'*************  Конец *********************************************/
Листинг 8.4. Вывод информации о пользователе компьютера и смена его пароля
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Валентина Тюрина
Валентина Тюрина

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

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

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

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

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

Дмитрий Матвеев
Дмитрий Матвеев
Россия, Москва, 1100, 2009