Показать полную графическую версию : Найти станцию, где выполнил вход пользователь.
nokogerra
31-10-2014, 12:43
Да, вопрос странный, я обычно поступал как нацист и просто при создании пользователя указывал в качестве logonWorkstation только его собственную станцию и сервера, где могла появиться необходимость пройти явную аутентификацию (например, VDI брокер и т.д.).
Но вот я пришел в организацию, имена машин не несут смысловой нагрузки, все в одном дефолтном OU, пользователи тоже в дефолтном OU, для переименования машин и разнесения их по OU нужно выяснить кому они принадлежат.
Вариант 1. - использовал логон bat echo %date% %time% %computername% %username% >> \\шара\файл.txt - но все в куче (хотя работает).
Вариант 2 - VBS с обращением к LDAP. Я в vbs не могу и честно украл, хотя скрипт довольно простой (он пишет в атрибут "отдел" пользователя на какой компьютер он заходил, а компьютеру - какой пользователь на него заходил):
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://dc" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://dc" & adsinfo.UserName)
Thiscomp.put "Department", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo
oUser.put "Department", "Logged on: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
Я дал права на запись в компьютер и пользователя для теста, скрипт отработал 1 раз и все о_О. После этого пытался запускать на разных машинах, от имени доменного администратора - больше он не работает. Кто-то может подсказать в чем проблема?
Кто-то может подсказать в чем проблема? »
Уберёте «On Error Resume Next» — узнаете.
nokogerra
05-11-2014, 06:18
Добрый день, спасибо за ответ.
Если так:
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://dc" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://dc" & adsinfo.UserName)
Thiscomp.put "Department", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo
oUser.put "Department", "Logged on: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
То вывод такой:
c:\script.vbs (4, 1) (null): Такой объект на сервере отсутствует.
Не понятно о каком объекте речь, тем более что 1 раз этот скрипт все-таки отработал. Объекты пользователя (под сеансом которого запускается скрипт) и компьютера, на котором это делается - точно существуют в базе того КД, куда происходит обращение ("LDAP://dc"). Если речь о каких-то других объектах - поясните пожалуйста.
Не понятно о каком объекте речь »
Об объекте, который Вы пытаетесь получить:
…GetObject("LDAP://dc" & adsinfo.ComputerName)
полагаю.
тем более что 1 раз этот скрипт все-таки отработал. »
Когда? С «On Error Resume Next»?
nokogerra
05-11-2014, 11:22
Да, с «On Error Resume Next», и в атрибут "department" пользователя было записано имя машины, на которой этот скрипт был выполнен, но как я сказал ранее, произошло это только 1 раз.
Об объекте, который Вы пытаетесь получить:
Код:
…GetObject("LDAP://dc" & adsinfo.ComputerName) »
я пытаюсь получить имя компьютера текущего компьютера, и как я сказал, учетная запись компьютера существует.
alef2474
05-11-2014, 11:34
В чем разница с первоисточником?
http://sysrtfm.ru/windows-sever-2008/zaloginennye-polzovateli-na-pk-v-konsoli-active-directory-onlajn-vbs-skript/
дальше пользователям дается право на запись в поле «Description» учетных записей их компьютеров. скрипт выполняющийся при входе записывает description logoff и наоборот.
nokogerra
05-11-2014, 14:03
Это не тот первоисточник, где я брал скрипт. Там description, у меня department, какая разница в какой атрибут писать?
Да, с «On Error Resume Next» »
nokogerra, вот с «On Error Resume Next» он как раз и не выполнился.
Зачем там:
Set ThisComp = GetObject("LDAP://dc" & adsinfo.ComputerName)
и ниже:
Set oUser = GetObject("LDAP://dc" & adsinfo.UserName)
«dc»? Откуда оно взялось? Зачем нужно? Что сие должно означать?
alef2474
05-11-2014, 17:01
Это не тот первоисточник, где я брал скрипт. Там description, у меня department, какая разница в какой атрибут писать? »
Может Вы брали скрипт у копировщика этого первоисточника, и description и department может быть свободен для записи и собственно для вашей задачи и все из изображенной книги с моржом. (Description удобнее, т.к. по-умолчанию высвечивается колонкой в AD как там на скрине показано)
Главное, что тот скрипт работает и, как видите, он без dc и с дополнительными пояснениями о правах в комментариях
nokogerra
06-11-2014, 08:34
Спасибо обоим за ответы и терпение.
Вы оба были правы, а я нет. Однако, это магия, при первом тесте я решил не заморачиваться с правами и просто дал полные права на конкретные объекты (на пользователя и на компьютер) определенному пользователю. Записи в атрибутах не появились, и я решил добавить сервер подключения, как указано в этой статье http://www.askit.ru/custom/progr_admin/m15/15_03_adsi_ldap_provider.htm, после этого , как я говорил, скрипт отработал 1 раз. Убрал сервер подключения из скрипта, убрал полные права и сделал делегирование только на запись в атрибут "Описание" - работает. Не могу понять в чем была проблема, очевидно я где-то запутался. Собственно, метод работает.
P.S. вопрос не в тему - чем принципиально отличается делегирование прав через мастер от назначения оных во вкладке "Безопасность" кроме "удобства" (например, я могу добавить права на запись атрибута "описание" дочерних объектов OU типа "компьютер" и через "Безопасность")? И как отменить делегирование прав? Через "Безопасность"?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC