Залогиненные пользователи на ПК в консоли Active Directory онлайн. VBS скрипт

vbscriptИ так, встала задача — нужно каким либо образом определять на каком компьютере залогинен пользователь AD либо наоборот какой пользователь залогинен на ПК в текущий момент. На разных админских форумах эту задачу решают по разному. Я как то давно нашел скрипт и хочу им с Вами поделится.

Вкратце — 2 скрипта VBS помещаются в групповые политики нужной Organisation Unit дальше пользователям дается право на запись в поле «Description» учетных записей их компьютеров. скрипт выполняющийся при входе записывает description logoff и наоборот.

Вот как это выглядит в итоге:

Залогиненные пользователи на ПК в консоли AD онлайн

Теперь подробнее:

1) Группе… скажем Domain Users делегируем на OU, содержащий компьютеры, следующие разрешения: Computer Objects > Write Description. Далее приведенные действия отличаются немного от Windows Server 2003 и Windows Server 2008 ENG, т.к. я все делал в русской оснастке 2008 AD. Для этого правой кнопкой мыши на OU где находятся все ПК, выбираем первый пункт «Делегирование управления», «Далее», «Добавить», выбираем группу пользователей «Domain Users» например, «Далее», Выбираем «Создать особую задачу для делегирования», «Далее», «только следующими объектами в этой папке», спускаемся в самый низ и отмечаем «Компьютер объектов», «Далее», Убираем галку «Общие» и отмечаем «Разрешения для свойств» — список увеличится, почти в самом низу отмечаем «Запись Описание», «Далее» и «Готово». После этого Все пользователи домена смогут записывать в поле «Описание» компьютеров.

2) Дальше нужно добавить скрипты в GP

Вот сами скрипты:

logoff_sc.vbs
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", ">> Logged off: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

Сохраняем их с расширением VBS.

logon_sc.vbs

On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

Все теперь при логофе\логоне пользователей в Поле Description компов  будут появлятся соответствующие записи.

3) Открываем групповую политику OU в которой находятся пользователи. «Конфигурация пользователя», «Политики», «Конфигурация Windows», «Сценарии Вход/Выход из системы» и добавляем скрипты.

Авторство retifff на 23.01.2010

Удачи!!

Оставите комментарий ?

13 Комментарии。

  1. Понравилась идея, решил реализовать пока на своем отделе, но что оно у меня не работает. Даже при запуске скрипта ручками — ничего не происходит (OS Win 7), как то можно отследить работу скрипта vbs? Или дело не в нем?

    • привет, скорее всего права неправильно раздал, либо скрипт просто не выполняется, посмотри журнал событий на клиенте, выполняется ли скрипт. если да то смотри на контроллере домена журнал безопасность. Если там есть аудит отказа то не правильно раздал права.

  2. Доброго времени суток.
    Подскажите пожалуйста.
    Данный скрипт будет запускаться всеми пользователями в данном OU!
    Как сделать исключения для администраторов домена?!
    Дело в том, что данный скрипт сбивает описания серверов. Т.е. было описание какое либо сервака… Логинится на него админ и данное описание меняется на ФИО

    • Да, все так и есть. По правильному нужно разделять объекты в OU по ролям. По идее у Вас не должно было быть серверов в OU с ПК.

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

      • Сервера с ПК в разных OU. Но политика применяется на все OU с учетками пользователей. а туда входят и админы. а у админов в свою очередь по умолчанию разрешен параметр «Запись Описание» в следствии этого и меняются описания у серверов.
        Или я что-то не правильно сделал/понимаю?!
        Заранее спасибо

        • А,вспомнил. Да политика разрешающая запись действует на всех пользователей, но скрипт логоф логон нужно прописывать только пользовательским учетным записям. Для этого в домене, как и рекомендуем MS и пользователи и ПК должны быть разнесены по ролевым OU. Затем все админские и сервисные учетки выносим в др OU на которую будет действовать другая политика в которой не прописаны скрипты.

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

          НО тут может быть проблема с AD если этот сервер в тойже OU что и остальные ПК. Но если мы выносим все сервера в ДР OU то там не будут прописаны права пользователям на прописывание описания, хоть и скрипт будет выполняться. Но по идее, на терминальном сервере своя политика либо в политике своя фильтрация.

          Надеюсь понятно описал… будут вопросы опишу еще более подробно.

          • Немного проще обошёл применение админами данного скрипт. В пермишинах есть галка — запретить использование локальными админами (как то так).

            А теперь следующая задача. погуглил. не нашел. Может вы подскажите.
            Есть 2 домена (подружены)

            в домене 1 я все это настроил.
            на ПК с домена 1 описание становится в виде ФИО пользователей с домена 1.
            Но часть пользователей сидят по другой схеме.
            Учетки из домена 2. а ПК в домене 1. и естественно когда пользователь из домена 2 логиниться на свой пк в домене 1. в AD описания не появляются. Не подскажите как решить задачу?!

          • Тут, для начала, нужно убедиться, что все условия выполнены:
            — Дано разрешение в OU пользователям обоих доменов
            — Во втором домене на OU тоже дано такое разрешение для пользователей обоих доменов.
            — Дальше проверить, что политика со скриптом точно выполняется для залогиненного пользователя.

            ну и по идее все должно сработать.

  3. … И в итоге любой юзер имеет права изменять данные пользователей…

    • имеет права ТОЛЬКО записать поле description
      Врядли Вы сможете найти пользователя который сможет это сделать руками, да еще того, которому это будет нужно)))

  4. Сергей

    чтобы все работало, надо сначала почистить, то что было занесено руками в это поле

    Get-ADComputer -Filter ‘Description -notlike «*Logged*»‘ | Set-ADComputer -Clear Description

    и вот тогда — счастье

  5. Александр

    У меня немного отличается скрипт. Добавлено внесение информации в описание пользователя:
    В скрипт logon:
    ‘В поле Description учетки пользователя пишем имя компьютера и время входа
    oUser.put «description», ThisComp.cn + » ; PowerOn: » + CStr(Now)
    oUser.Setinfo

    Что немного увеличивает удобство. Т.к. не только в свойствах компьютера можно посмотреть кто залогинился, но и в свойствах пользователя посмотреть на каком ПК пользователь залогиниться.

    Ну и похожее в logoff добавлено:
    ‘В поле Description учетки пользователя пишем имя компьютера и время входа
    oUser.put «description», oUser.description + » ; PowerOff: » + CStr(Now)
    oUser.Setinfo

Ответить на webdiez ¬
Отменить ответ


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>