По долгу своей работы, был написан скрипт, который позволяет записывать данные входа в свободные аттрибуты пользователя.
Не секрет что, при большом количестве компьютеров в домене, возникает ситуация, быстро найти соответствие между пользователем домена и его компьютером. Конечно, если имена компьютеров создавать по ФИО пользователей, то никаких затруднений, это вызвать не может, но чаще всего происходит наоборот.
Корпоративными политиками в большинстве случаев, запрещено именовать компьютеры как ФИО пользователя. Это связано в том числе и тем, что пользователь, может уйти (уволится, перевестись, сменить фамилию), а компьютер все таки не личная собственность этого сотрудника и он(компьютер) никуда не уволится. А значит сотрудникам ИТ подразделения будет необходимо, менять имя компьютера на другое, что занимает время и силы.
Таким образом у нас возникла задача: каким образом узнавать соответствие между пользователем домена который работает на компьютере, и именем этого компьютера.
Заведение журнала где будет прописано соответствие, даже рассматривать не будем. Это архаично и не технологично :)
Напишем скрипт, который при входе пользователя в домен, будет записывать данные в один из свободных аттрибутов пользователя.
Что нам может быть интересно, кроме имени компьютера?
Лично в моей практике, это серийный номер системного блока (материнской платы), это 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
после этого, минут через 15 попробуйте перегрузить компьютер и войти в домен.
В свойствах пользователя вы сможете увидеть следующее
В поле WWW страница(аттрибут wWWHomePage): будет строка разделенная двоеточиями, где идут последовательно, имя компьютера, серийный номер, IP адрес, MAC адрес.
Кроме этого в аттрибутах компьютера, в аттрибуте adminDescription кроме этих данных будет записано и имя залогинившегося пользователя на этой рабочей станции.
Таким образом мы решили поставленную задачу. Мы всегда сможем прочитав данные с этих аттрибутов, восстановить, кто и на каких копьютерах работает.
Можно с помощью любых языков программирования, "выцепить" все эти данные, спарсить и предоставить руководству или для личного использования, данные о компьютерах и пользователях в вашем домене.
Дополнительно:
В аттрибутах пользователя есть специально, незадействованные поля типа extensionAttributeХ, где X от 1 до 15.
В эти пятнадцать полей, можно записывать все что хотите, не делая так как сделано у меня, то есть в extensionAttribute1 записать имя компьютера, в extensionAttribute2 его IP адрес и так далее.
Есть только две неудобности.
1. Эти аттрибуты не видны через стандартное представление в остастке Active Directory - пользователи и компьютеры Необходимо включать в разделе Вид- Дополнительные компоненты
2. Для того что бы logon скрипт мог записывать данные в эти поля, необходимо исправить права доступа на редактирование этих аттрибутов.