Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Windows Server 2008/2008 R2 (http://forum.oszone.net/forumdisplay.php?f=97)
-   -   Найти станцию, где выполнил вход пользователь. (http://forum.oszone.net/showthread.php?t=290248)

nokogerra 31-10-2014 12:43 2422902

Найти станцию, где выполнил вход пользователь.
 
Да, вопрос странный, я обычно поступал как нацист и просто при создании пользователя указывал в качестве 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 раз и все о_О. После этого пытался запускать на разных машинах, от имени доменного администратора - больше он не работает. Кто-то может подсказать в чем проблема?

Iska 31-10-2014 15:15 2422964

Цитата:

Цитата nokogerra
Кто-то может подсказать в чем проблема? »

Уберёте «On Error Resume Next» — узнаете.

nokogerra 05-11-2014 06:18 2424796

Добрый день, спасибо за ответ.
Если так:
читать дальше »

Код:

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"). Если речь о каких-то других объектах - поясните пожалуйста.

Iska 05-11-2014 06:22 2424798

Цитата:

Цитата nokogerra
Не понятно о каком объекте речь »

Об объекте, который Вы пытаетесь получить:
Код:

…GetObject("LDAP://dc" & adsinfo.ComputerName)
полагаю.

Цитата:

Цитата nokogerra
тем более что 1 раз этот скрипт все-таки отработал. »

Когда? С «On Error Resume Next»?

nokogerra 05-11-2014 11:22 2424882

Да, с «On Error Resume Next», и в атрибут "department" пользователя было записано имя машины, на которой этот скрипт был выполнен, но как я сказал ранее, произошло это только 1 раз.

Цитата:

Цитата Iska
Об объекте, который Вы пытаетесь получить:
Код:
…GetObject("LDAP://dc" & adsinfo.ComputerName) »

я пытаюсь получить имя компьютера текущего компьютера, и как я сказал, учетная запись компьютера существует.

alef2474 05-11-2014 11:34 2424889

В чем разница с первоисточником?
http://sysrtfm.ru/windows-sever-2008...jn-vbs-skript/

Цитата:

дальше пользователям дается право на запись в поле «Description» учетных записей их компьютеров. скрипт выполняющийся при входе записывает description logoff и наоборот.

nokogerra 05-11-2014 14:03 2424959

Это не тот первоисточник, где я брал скрипт. Там description, у меня department, какая разница в какой атрибут писать?

Iska 05-11-2014 14:24 2424974

Цитата:

Цитата nokogerra
Да, с «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 2425064

Цитата:

Цитата nokogerra
Это не тот первоисточник, где я брал скрипт. Там description, у меня department, какая разница в какой атрибут писать? »

Может Вы брали скрипт у копировщика этого первоисточника, и description и department может быть свободен для записи и собственно для вашей задачи и все из изображенной книги с моржом. (Description удобнее, т.к. по-умолчанию высвечивается колонкой в AD как там на скрине показано)

Главное, что тот скрипт работает и, как видите, он без dc и с дополнительными пояснениями о правах в комментариях

nokogerra 06-11-2014 08:34 2425323

Спасибо обоим за ответы и терпение.
Вы оба были правы, а я нет. Однако, это магия, при первом тесте я решил не заморачиваться с правами и просто дал полные права на конкретные объекты (на пользователя и на компьютер) определенному пользователю. Записи в атрибутах не появились, и я решил добавить сервер подключения, как указано в этой статье http://www.askit.ru/custom/progr_adm...p_provider.htm, после этого , как я говорил, скрипт отработал 1 раз. Убрал сервер подключения из скрипта, убрал полные права и сделал делегирование только на запись в атрибут "Описание" - работает. Не могу понять в чем была проблема, очевидно я где-то запутался. Собственно, метод работает.

P.S. вопрос не в тему - чем принципиально отличается делегирование прав через мастер от назначения оных во вкладке "Безопасность" кроме "удобства" (например, я могу добавить права на запись атрибута "описание" дочерних объектов OU типа "компьютер" и через "Безопасность")? И как отменить делегирование прав? Через "Безопасность"?


Время: 21:02.

Время: 21:02.
© OSzone.net 2001-