Скрипт  VBS. Запись данных в аттрибуты пользователя Active Directory.

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

Не секрет что, при большом количестве компьютеров в домене, возникает ситуация, быстро найти соответствие между  пользователем домена и его компьютером. Конечно, если имена компьютеров создавать по ФИО пользователей, то никаких затруднений, это вызвать не может, но чаще всего происходит наоборот.

Корпоративными политиками в большинстве случаев, запрещено именовать компьютеры как ФИО пользователя. Это связано в том числе и тем, что пользователь, может уйти (уволится, перевестись, сменить фамилию), а компьютер все таки не личная собственность этого сотрудника и он(компьютер) никуда не уволится. А значит сотрудникам ИТ подразделения будет необходимо, менять имя компьютера на другое,  что занимает время и силы.

Таким образом у нас возникла задача: каким образом  узнавать соответствие  между пользователем домена который работает на компьютере, и именем этого компьютера.

Заведение журнала где будет прописано соответствие, даже рассматривать не будем. Это архаично и не технологично :)

Напишем скрипт, который при входе пользователя в домен, будет записывать данные в один из свободных аттрибутов пользователя.

Что нам может быть интересно, кроме имени компьютера?

Лично в моей практике, это серийный номер системного блока (материнской платы), это IP адрес компьютера ( так как адресация динамическая и раздается по DHCP), это мак адрес сетевой карты этого компьютера.

Сам скрипт имеет вид

Dim adsinfo, ThisComp, oUser
 
' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
 
Set objWMI = GetObject("winmgmts:")
Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
 
Set colBIOS = objWMI.ExecQuery("Select * from Win32_BIOS")
For each objBIOS in colBIOS
    strSerial= objBIOS.SerialNumber
Next
 
If colNICs.Count > 0 Then
    For Each objNIC in colNICs
    If IsArray(objNIC.DefaultIPGateway) Then
    arrIP = objNIC.IPAddress
strIP = objNIC.IPAddress(0)
    strMAC = objNIC.MACAddress
    End If
    Next
End If
 
' Заносим данные в AD
' В поле adminDescription компьютера пишем имя пользователя, серийный номер  компа,  его IP и МАC
Thiscomp.put "adminDescription", oUser.cn + ":" + strSerial + ":" + strIP + ":" + strMAC
ThisComp.Setinfo
 
'В поле wWWHomePage учетки пользователя пишем имя компьютера , серийный номер  компа,  его IP и МАC
oUser.put "wWWHomePage", ThisComp.cn + ":" + strSerial + ":" + strIP + ":" + strMAC
oUser.Setinfo
wscript.quit

Сохраняем его  под именем, например admin.vbs

После  этого  разместим этот скрипт  в групповой политике домена.

 

Фактически  скрипт будет расположен по пути подобный этому

\\ваш домен\SysVol\ваш домен\Policies\{63111C9A-DADA-4975-8A80-СС238F71ABE2}\User\Scripts\Logon

после этого, минут через 15 попробуйте перегрузить компьютер и войти в домен.

В свойствах пользователя  вы сможете увидеть следующее

 

В поле WWW страница(аттрибут wWWHomePage) :  будет строка разделенная двоеточиями, где  идут последовательно, имя компьютера, серийный номер, IP адрес, MAC адрес.

Кроме этого в аттрибутах компьютера, в аттрибуте adminDescription кроме этих данных будет записано и имя залогинившегося пользователя на этой рабочей станции.

Таким образом мы решили поставленную задачу. Мы всегда сможем прочитав данные с этих аттрибутов, восстановить, кто и на каких копьютерах работает.

Каким образом прочесть? Можно воспользоватся массой способов, и на этом сайте есть статьи посвященные этому вопросу. Например: Карточка сотрудника Active Directory через Excel

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

Дополнительно:

В аттрибутах пользователя есть специально, незадействованные поля типа extensionAttributeХ, где X от 1 до 15.

В эти пятнадцать полей, можно записывать все что хотите, не делая так как сделано у меня, то есть в extensionAttribute1 записать имя компьютера, в extensionAttribute2 его IP адрес  и так далее.

Есть только две неудобности.

1. Эти аттрибуты не видны через стандартное представление в остастке Active Directory - пользователи и компьютеры Необходимо включать в разделе Вид- Дополнительные компоненты

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

Удачной работы!