Определения кто из пользователей за каким компьютером работает. AD.

 

Определения кто из пользователей за каким компьютером работает. AD.

Всегда имел желание написать цикл постов, где был бы понемногу изложены разные интересные мелочи и задачи, которые приходилось решать в повседневной рутине системного администратора.
Возможно, кое-что из описанного будет полезно другим сисадминам.

Сразу оговорюсь, что в качестве исходных данных имею Windows среду и домен Active Directory, причем ОС преимущественно WindowsXP — Server2003. Ну и обслуживаемые компании были в основном некрупными (от 30 до 500 пользователей).

Начнем, пожалуй, c часто встречаемой задачи определения кто из пользователей за каким компьютером работает.

Для решения этой задачи были перепробованы разные методики:
•именование машин по именам пользователей (нудно. Через пару месяцев начинаешь забывать переименовать компьютер, и система катится в хаос)
•строгий учет кому куда можно ходить где нибудь в отдельном Excel и установка прав на логон только на конкретную машину и т.д. (чистой воды паранойя, была у одного из клиентов. ОЧЕНЬ нудно и муторно)
•Использование сторонних утилит от bginfo и psloggedon от Sysinternals, до всевозможных Hyena и Ideal Administrator (большая часть стоит денег, не всегда корректно работают, или слишком открытые, например в случае с BgInfo на рабочем столе становится видна информация, которую не хотелось бы чтобы видели абсолютно все. Возможно это паранойя – но не хочется чтобы толпы неизвестных людей в отделе продаж или на ресепшне узнали внутреннее имя компьютера, пользователя, IP и т.п. просто взглянув на экран.

В результате, мы "построили свой лунапарк с VBS и пользователями", и написали 2 небольших логон-логоф скрипта, которые запускаются групповой политикой на уровне всего домена при входе пользователя в систему, и при выходе из нее соответственно.


ЛОГОН-Вариант

Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

' Заносим данные в AD
' В поле Department компьютера пишем имя пользователя, и время входа
Thiscomp.put "Department", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

'В поле Department учетки пользователя пишем имя компьютера и время входа
oUser.put "Department", "Logged on: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
wscript.quit


ЛОГОФФ-Вариант

Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

' Заносим данные в AD
' В поле Department компьютера пишем имя пользователя, и время входа
Thiscomp.put "Department", "Logged off: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

'В поле Department пользователя пишем имя компьютера и время входа
oUser.put "Department", "Logged off: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
wscript.quit
Пояснения по коду наверное не нужны, скрипт элементарен, расскажу лишь про плюсы скрипта которые в моей ситуации значительно перевесили минусы (о которых тоже расскажу).


Плюсы

•при таком скрипте достаточно настроить в оснастке AD отображение одного дополнительного столбца (в нашем случае department) и можно будет четко видеть где кто работает в данный момент, когда он туда залогинился, либо если на компьютере никто не работает – то кто на нем работал последним, и когда вышел из системы
•Не привлекается никакого стороннего ПО, нагрузка на систему (время входа пользователя) увеличивается очень незначительно
•Легко и наглядно отслеживается наличие старых объектов компьютеров-пользователей в AD (по дате последнего логина)
•Данные централизованно хранятся в AD и не нужно никакого дополнительного хранилища (файла, папки, БД и т.п.). Данные дублируются в объектах Пользователь и Компьютер, т.е. можно отследить ситуацию «дважды под одним и тем же вошел на разных компьютерах».
•Выбраны наименее используемые (у нас и у всех тех организаций, с которыми я работал) ОБЩИЕ для объектов пользователь и компьютер поля AD. Это плюс, потому что если бы поля были разными – то пришлось бы добавлять отображение лишних столбцов в оснастке AD
•Легко корректировать скрипт по своему усмотрению (выбирать другие поля для хранения данных, писать дополнительно в текстовый файл, исключать из обработки отдельных пользователей или компьютеры (например терминальные сервера), и т.д.)


Минусы

•НЕ ХРАНИТСЯ история входов, т.е. записано только текущее состояние. Если история входов нужна, то временно можно добавив несколько строк кода писать информацию еще и в сетевой файл, а если нужна постоянно – то лучше подумать о другом методе учета.
•Требуется выдать дополнительное разрешение Write\Modify на поле Department объектов Компьютер и Пользователь в AD для всех доменных пользователей. Минус в моей ситуации сомнительный, но и отрицать его не буду – он есть.

Продолжение следует (если, конечно, вам интересно читать такие «опытные мелочи»)