вторник, 22 апреля 2008 г.

Скрипты облегчающие жизнь

В сети под MS Active Directory часто возникает необходимость предоставить доступ определенным пользователям к определенным ресурсам, подключить сетевые диски, принтеры и т.п. в этом случае удобно воспользоваться скриптами.

Для подробного изучения VBS и возможностей применения скриптов можно почитать здесь (Примеры админских скриптов от MS, утилиты для их быстрого описания и прочее).

Немного теории.


Основные возможности работы с сетью с помошью VBS реализовано при помощи объекта WScript.Network. Создание этого объекта можно произвести так:

Set WshNetwork = WScript.CreateObject("WScript.Network")

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

Получение информации о пользователе, компьютере и имени домена

Свойства ComputerName, UserDomain и UserName возвращают, соответственно, имя компьютера, имя домена и имя текущего пользователя.
Можно использовать для

для протоколирования выполнения скрипта - записывается информация о том, на каком компьютере произошло то или иное событие;
для выполнения каких-либо действий только на том компьютере или только с тем пользователем, который указан в нашем списке (при помощи утилит Resource Kit можно основываться и на членстве пользователей в группах).


PS. Так же можно использовать эти значения для подстановки в скрипты.

Рассмотрим для примера подключение личной сетевого диска для пользователя

On Error Resume Next // включаем обработку ошибок

set wshNetwork = WScript.CreateObject( "Wscript.Network") // создание объекта WScript.Network.

user = wshNetwork.username // присваиваем переменной user значение имени текущего пользователя.

p_path = "\\server\" & user // присвоение переменной p_path значения пути к сетевой папке «\\server\username», где server - это имя сервера, а username — имя пользователя
wshNetwork.MapNetworkDrive "disk:" , p_path // подключение в качестве сетевого диска сетевой папки с адресом p_path и буквой диска disk.

Кроме того, можно просто отображать полученную информацию - например, на Web-странице, которая используется в качестве обоев для пользователя.



Обратить внимание:
UserDomain показывает только имя домена в формате имени NetBIOS. Имена в формате Active Directory не выводятся. Если компьютер работает не в домене, а в рабочей группе, выводится пустая строка;

свойство UserName может некорректно работать в сценариях регистрации под Windows 9x/ME в сетях без доменов: после выполнения сценария значение свойства UserName оказывается пустым (операционная система еще не поняла, под каким именем вошел пользователь).
Лечится так:


Set WshNetwork = Wscript.CreateObject("WScript.Network") // создание объекта WScript.Network.

user = "" // присвоение переменной user пустого значения

Do While user = "" // выполнять следующий код, пока имя пользователя не получит иное значение

user = WshNetwork.UserName // присваиваем переменной user значение имени текущего пользователя.

Wscript.Sleep(500) // прерывание выполнения на 500 мсек.

Loop // повторить



Методы для работы с дисками и сетевыми папками

EnumNetworkDrives - получение списка сетевых дисков на данном компьютере.

MapNetworkDrive - подключение сетевых дисков.

RemoveNetworkDrive - удаление сетевого диска.

PS. Cредствами WSH можно проверить наличие уже имеющихся сетевых ресурсов, реализовать обработку ошибок и т.п.

Реализация обработки ошибок при подключении к сетевому ресурсу - обязательна. Обычно при помощи специальной функции, она достаточно наглядна, так что комментировать не буду:

Sub ErrCheck (nr)

Select Case nr
Case 0

' Все в порядке

Case -2147024829

WScript.Echo "Сетевой ресурс не существует"

Case -2147024811

WScript.Echo "Диск уже подключен"

Case Else

WScript.Echo "Другая ошибка" & CStr(nr)

End Select
End Sub

Подключение сетевых дисков выглядит так:

On Error Resume Next

p_path = "\\server\folder"
// присвоение переменной p_path значения пути к сетевой папке «\\server\folder»

wshNetwork.MapNetworkDrive "disk:" , p_path // подключение в качестве сетевого диска сетевой папки с адресом p_path и буквой диска disk.

ErrCheck Err.Number
Если нужно сделать подключение сетевого диска постоянным (с восстановление подключения при входе в систему), то можно в конце строчки добавить параметр true.

wshNetwork.MapNetworkDrive "disk:" , p_path , true

true означает - сохранить информацию о подключении в профиле пользователя (сделать подключение постоянным). Кроме того, в качестве необязательных параметров можно передать имя пользователя и пароль для подключения.

Конечно, в функцию ErrCheck, помимо Echo, можно включить и другую обработку ошибок. В некоторых ситуациях для исключения ошибок можно сделать так:

On Error Resume Next

WSHNetwork.RemoveNetworkDrive "Z:"

WshNetwork.MapNetworkDrive "Z:", "\\server\folder", true




Методы для работы с принтерами

Теперь поговорим о подключении принтеров, для примера рассмотрим подключение принтера printer, расположенного на сервере server.

Работа с принтерами происходит при помощи методов

AddPrinterConnection – подключение принтера к выбранному порту.

WshNetwork.AddPrinterConnection "port:", "\\server\printer" // подключение принтера printer расположенного на сервере server к порту port:

Например: WshNetwork.AddPrinterConnection "lpt2:", "\\server\printer"

AddWindowsPrinterConnection – подключение принтера без указания обязательного порта

wshNetwork.AddWindowsPrinterConnection "\\server\printer"
EnumPrinterConnections – получение списка подключенных принтеров.

RemovePrinterConnections – удаление подключенного принтера.

wshNetwork.RemovePrinterConnections "\\server\printer".

SetDefaultPrinter – установка принтера для печати по-умолчанию.

wshNetwork.SetDefaultPrinter "\\server\printer".
Конечно, и в этом случае лучше реализовать обработку ошибок. Выглядеть она может так:

On Error Resume Next

WshNetwork.AddPrinterConnection "lpt2", "\\server\printer"

On Error GoTo 0 'Отключить обработку ошибок

On Error Resume Next

PS. при работе скрипта под Windows 95/98 драйвер принтера должен быть уже установлен - иначе возникнет ошибка



Для регулярного применения настроек можно пойти следующими путями.

Для сетей с доменами:

Скопировать скрипты в папку \\domain_controller\sysvol\domain_name\scripts, где domain_controller — название контроллера домена, а domain_name - домен.



В оснастке «Active Directory - пользователи и компьютеры» прописать название скрипта во вкладке «Профиль» в поле «Сценарий входа»





Для сетей без доменов:

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


Читать далее...