Как стать автором
Обновить

Комментарии 72

НЛО прилетело и опубликовало эту надпись здесь
1. представил себе буха в разгар рабочего дня. открыто 3 базы 1С,5 таблиц в Excel, отчётность, «консультант плюс» и прочее. И тут вы ей предлагаете выключить компьютер…

2. Overhead. А чего на наклейке сразу имя ПК не писать?
НЛО прилетело и опубликовало эту надпись здесь
Бух такой важный…

бухи бывают разные… а если у него отчет в это время в фоне в ЦБ формируется/отправляется? или проводки по реестру от яндекс.такси?


налепить QR код

в организации с 20+ работниками это работает максимум полгода

Бух такой важный… когда хочет показать свою важность, а когда никого чужих нету, то и выключит и включит, не зависимо от количества открытых программ. Ну если альтернатива потратить полчаса пытаясь определить что за компьютер, то может быть и решение. Я же не предлагаю делать так всегда, только в граничных случаях, когда уже совсем туго.

А как насчет того, что после перезагрузки бух не сможет повторить дефект? Вообще гениальное предложение. А что? Действительно — сломалось что-то — выключи — включи.

Насчет 2-го — согласен. Наелся этого по уши, когда тебе начинает по телефону диктовать пароль к TeamViewer человек, у которого очень плохо с английским. Игра «угадай пароль».

Насчет первого — не соглашусь. Когда у бухов разгар работы — им бывает вообще не оторваться. Некритичные ошибки и проблемы откладываются на потом.

если речь, про TeamViewer, то пусть уж тогда вам пароль через вацап отправляют. там и запоминать не надо.
ps: имхо мы отошли от изначальной постановки задачи (узнать имя ПК пользователем или админом).

Инвентарный номер не подойдёт?
вида «организация.отдел.сотрудник».
Не совсем понял мысль. Можно подробнее?
в крупных предприятиях кодируются структурные подразделения.
1.технологи
2.производство.

5.бухгалтерия

9.отдел энергетика

на компе наклейка «12.7.21»
На русском означает «администрация.клининг-менеджер.Марина»
в саппорте по наклейке карточка компа, привязанная к карточке сотрудника, в которой есть в т.ч. номер мобильного, с которого Марина может позвонить, номер её местного телефона.
а в карточке — всё, чего душа пожелает, включая температуру дисков и обороты вентилятора БП.

зы: это для первой части задачи и чтобы не усложнять qr кодами.
чёй-то «предпросмотр» и «отправить» неактивны… :(
Идея интересная, но за актуальностью таких наклеек надо следить, что в наших реалиях не всегда возможно. Да и человеческий фактор никто не отменял: компьютеры сотрудникам поменяли, а наклейки забыли.
Если внутренние номера статичны, то привязку к ним можно делать, в плане определения имя компа.

а если ПК заливаются с помощью WDS/SCCM и имена генерируются автоматически?
а если завтра бухгалтерия решит поменять формат инвентарных номеров (с 1234 на 60402-1234)?

Как раз использовал схему с инвентарным номером. При подготовке каждого ПК перед сдачей в работу на него клеился на видном для пользователя месте инвентарник, а имя ПК задавалось по стандарту "номер офиса-инвентарный номер". Соответственно при обращении просто спрашивали откуда человек звонит и просили продиктовать номер с наклейки.
Зачем добавлять в номер еще конкретного сотрудника — не очень понятно, ведь он сегодня за одним ПК, а завтра в другом офисе за другим.
Но это не отменяет удобства хранения информации о логинах в AD в удобном виде — когда нужно что-то сделать без присутствия человека (например ушел на обед, отправив тикет). И странно что в AD до сих пор нет удобного места для хранения и просмотра такой информации — либо парсить логи входа на всех контроллерах и агрегировать, либо как у автора — кастомные логон скрипты и кастомное поле у пользователя.

Просто оставлю это здесь тыц и это тыц

Сорри промахнулся

Хм. Логон и логофф скрипт. Отдельно на машины отдельно на юзверя. Работает 7 лет. В оснастке Ad видно кто на какой машине. Только права раздать на атрибуты правильно нужно. И вообще политики не на весь домен можно кидать. А на отдельные ou

Интересно взглянуть на Ваши логон/логофф-скрипты для машины. Каким образом машина узнает, кто на ней залогинен с учетом того, что сначала отрабатывает логон-скрипт для машины, а уже потом для пользователя?

Завтра утром по msk кину. И где правильно права дать

Так скрипт отрабатывает на пользователя. И он пишет на нужный атрибут.

В самом начале статьи по Вашей ссылке:
Командлет Set-ADComputer входит в состав модуля Active Directory для PowerShell и требует наличие установленного модуля на компьютере.

У Вас на всех рабочих станциях ADUC установлен?
VBS-скрипты из моего решения этого не требуют, будут запускаться даже на старых ОС, а скорость выполнения будет значительно выше, чем у их PS-аналогов из Вашей статьи.

И, как я писал выше с статье, вот эта модификация мне не очень нравится:
В первую очередь необходимо делегировать права группе Domain Users (или другой группе безопасности пользователей) на OU с компьютерами на изменение значений в полях объктов типа Computer: ManagedBy и description (Write Description + Write Managed By).


В моём же варианте всё работает «из коробки», со стандартными настройками безопасности.
Это ссылка для примера была.
У меня тоже через vbs скрипт сделано

On Error Resume Next

Set objSysInfo = CreateObject(«ADSystemInfo»)
Set objNetwork = CreateObject(«WScript.Network»)
Set objUser = GetObject(«LDAP://» & objSysInfo.UserName)
Set objComp = GetObject(«LDAP://» & objSysInfo.ComputerName)
strFullName = objUser.Get(«displayName»)

objUser.Put «description», objNetwork.ComputerName & " login " & Date
objUser.SetInfo
objComp.Put «description», strFullName & " login " & Date
objComp.SetInfo

И в оснастке Ад в поле комментарий видно кто куда залогинен. Как на машине так и у пользователя

Пользователю даны права в АД на изменения поля description
В Security EventLog'а пишется событие ID 4624 (4625) с информацией о логине пользователя, если включить «Audit logon events» в полиси.

P.S. На компьютер может быть залогинено несколько пользователей одновременно.
В Security EventLog'а пишется событие ID 4624 (4625) с информацией о логине пользователя, если включить «Audit logon events» в полиси.

Вы пробовали парсить Security-логи, скажем, для организации, где тысяча пользователей и с десяток контроллеров домена?
P.S. На компьютер может быть залогинено несколько пользователей одновременно.

И что из этого следует?
PowerShell позволяет. Но если контроллеров действительно много и пользователь может логиниться на любом, что странно… то посоветую запускать скрипты параллельно удалёно на каждом (например, Invoke-Command), а не один скрипт, чтобы не пересылать логи со всех на свой.
и пользователь может логиниться на любом, что странно…

Что тут странного? Это стандартное поведение AD.

то посоветую запускать скрипты параллельно удалёно на каждом

Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?
Что тут странного? Это стандартное поведение AD.

Странно не поведение AD, а то, что, по озвученным вами условиям, любой может залогинится при помощи любого из десятка AD, и складывается впечатление, что в вашей организации много контроллеров без географического разделения (т.е. без необходимости).
Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?

Что вас пугает в параллельном запуске скриптов на контроллерах?
И что из этого следует?

Так как вы в вашем скрипте решили проблему одновременного логина пользователя на нескольких машинах? Ведь, если не ошибаюсь, то новый логин будет перезаписывать атрибут со старым, но ещё актуальным логином.
(Типичный пример в сетях 1Г и строже: пользователь имеет личную машину, но для вывода информации должен приходить со своей флешкой на машину с открытыми USB-портами).
складывается впечатление, что в вашей организации много контроллеров без географического разделения (т.е. без необходимости).

Совсем нет. К примеру, 5 площадок с парой DC в каждой.

Что вас пугает в параллельном запуске скриптов на контроллерах?

Я не про параллельный запуск, а вообще про парсинг. Не пугает ничего,, если это не в моей AD творится. :) Парсинг таких логов — ресурсоёмкая операция, и я бы не стал на DC ее запускать. Как Вы планируете это реализовать на практике? Вручную по мере надобности? По расписанию автоматом? За какой период будете смотреть, как и куда выгружать результаты?

Ведь, если не ошибаюсь, то новый логин будет перезаписывать атрибут со старым, но ещё актуальным логином.

Да, всё верно.

пользователь имеет личную машину, но для вывода информации должен приходить со своей флешкой на машину с открытыми USB-портами

Согласен, есть нюансы.
Как вариант. Кладём учётку такой «открытой» машины в отдельный OU, к которому не применяется GPO. В случае проблем на этой машине пользователь сообщает, что, мол, я сейчас не за своим ПК, а за «открытым». Техподдержка со своей стороны видит имя этой машины в ADUC. Либо на самой машине есть наклейка с номером/сетевым именем (если машин несколько).
Да, всё верно.

Но это же убивает изначальную идею на корню!?
Насчёт секьюрити — ивентов. Нет проблемы, если Вы их парсите и складываете в отдельный сторедж, а потом уже именно его опрашиваете. Минус такого решения, что нужно тащить ещё один компонент. В этом отношении ps-скрипты попросту выглядят проще (но совершенно необязательно, что это более хороший способ).


И если уж так рассуждать, то почему обязательно на АД садиться? Во многих компаниях есть что-то вроде Корп портала или системы учёта времени сотрудников. Вот по Корп порталу можно отследить кто и с какой машины залогинился (по айпи). Я не скажу, что это сильно лучше, чем с АД, но как вариант — почему нет?

Но это же убивает изначальную идею на корню!?

Почему Вы так считаете? Задача — оперативно узнать, за какой машиной сейчас работает пользователь, чтобы удаленно подключиться/выполнить диагностику. Сбор истории — это уже другая задача.

И если уж так рассуждать, то почему обязательно на АД садиться?

Описанное в статье решение для тех, кто уже «сидит» на AD, и оно позволяет добавить нужный функционал в уже работающую систему с минимальными трудозатратам. Если же инфраструктура поднимается с нуля, то, конечно, возможны варианты.
Почему Вы так считаете? Задача — оперативно узнать, за какой машиной сейчас работает пользователь, чтобы удаленно подключиться/выполнить диагностику. Сбор истории — это уже другая задача.

Потому что если у пользователя две активные сессии, то Вы об этом не узнаете.
Что хуже — если пользователь залогинился на компе А, потом на компе Б, а потом разлогинился на Б, но продолжил работу на А, то Вы об этом тем более не узнаете

Да, скрипты неплохо бы дописать чтобы в атрибуты машины тоже заносилась информация по вошедшему/вышедшему пользователю. У нас так сделано.

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

Почему гиперактивных?


это уже другая задача.

И да, и нет.


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

Процессы чего, простите? Поддержки? Вам просто указали на недостаток Вашей системы — она в определенных случаях может давать недостоверные данные. Решение есть у коллеги ниже — самое правильное — https://habr.com/ru/post/463579/?reply_to=20592497#comment_20592363

"Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?"


Я делал несколько скриптов. Несколько тысяч пользователей. Больше сотни географически распределенных DC. Парсинг журналов DC. Раз в час параллельно парсились все журналы. В фильтре можно указать с какого времени читать файл. По id записи убиралось дублирование. Завели отдельную ВМ для этого. Запись в ms sql. Потом переделал на elastic search. Помимо этого ещё много чего собиралось с журналов. И не только с журналов безопасности. Например журналы direct access, rds gateway. Плюс раз в день опрос всех машин на список ПО. Все максимально параллезировалось. Пока хватит свободной памяти. Только через posh и wmi. И ещё много ещё чего. Брат жив.

Но согласитесь, такое такое решение требует больше ресурсов и времени (если оно не было внедрено ранее), когда конечная цель весьма скромная.

Мне кажется, что возможность отследить кто на какой машине является не основным эффектом этой системы, а побочным артефактом, хоть и довольно удобным. Зачем такое может понадобиться? Да для мониторинга тех же всплесков активностей хакеров по неуспешным security событиям. Такой вот недо-SoC.

Вы пробовали парсить Security-логи, скажем, для организации, где тысяча пользователей и с десяток контроллеров домена
ADAudit успешно парсит, а если деньги важнее времени, то Powershell по расписанию сделает то же.
Но ламповой практической админской статье — лайк. Пользовался похожими скриптами на прошлой работе (было сделано до меня), только те скрипты писали не в AD, а в общую папку, что снимало проблему с перезаписью актуальных данных.
Хорошая статья :) Как раз по этой теме сегодня на работе была заморочка.

Разница в скриптах
«n» — «ff» (logon — logoff)
А Вы наблюдательный. :)

А почему не сделать один скрипт, а logon/logoff вынести как параметр?

Мне показалось удобнее так. Но ничто не мешает сделать с параметрами. Как говорится, на вкус и цвет… все фломастеры разные

если 100500 машин и пользователей, то можно поставить какой-нибудь fusioinventory, который будет следить и за этим, и за многим другим.
Я в своё время делал подобное как раз с помощью упомянутого вами BgInfo — в нём, помимо вывода информации на рабочий стол, есть возможность при запуске заносить эту же информацию в файл на сетевой шаре или в базу данных.
Решили проблему с именами проще:
Имя пк соответствует имени пользователя, а имя пользователя в виде ФамилияИО.
Для совсем тяжёлых случаев распространяем групповой политикой rainmeter (отбражает инфу на рабочем столе, не затрагивая обои) с информацией «имя пк, имя пользователя, ip, домен, ОС и её разрядность».
ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров. Замучаетесь переименовать и всё равно не уследите в итоге.
Для совсем тяжёлых случаев…

Тяжёлые — это какие, например?
ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров. Замучаетесь переименовать и всё равно не уследите в итоге.

В любом случае, с приходом нового пользователя, ПК нужно настроить. Переименование занимает не так много времени, зато соблюдается порядок.
Тяжёлые — это какие, например?

Когда имя ПК по какой-то причние не соответствует имени пользователя =) Обычно если одним ПК пользуются несколько человек, либо сотрудник, настраивающий ПК забыл\забил на преименование. Но ставим софтину всем пользователям — на всякий «тяжелый» случай.

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

Не нужно. Перемещаемые профили? vdi? И пускай работает себе.

Зачем настраивать ПК под нового пользователя? Софт стандартный, настройки почта и т.д. ярлыки — подтягиваются из политики при логине. Документы на общем сетевом диске, с правами доступа по группам AD и с авто монтированием той же политикой.
И пусть пересаживаются хоть каждый день все.

Как раз-таки на компах довольно часто ставится специализированное программное обеспечение, которое может быть установлено не у всех сотрудников отдела, ЭЦП, средства от НСД и прочие прелести госслужбы.

Ага, ну это уже специфика начинается, у меня таких было мало, в отдельных отделах, и да, там более индивидуальный подход уже.

ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров.

Т.е. чуть чаще, чем всегда ) полностью согласен. Имя компа должно содержать инвентарный номер (PC-12345678 подойдёт), может кодировать тип оборудования или его местоположение (PC-MSK-01-3000)

Собирать онлогон скриптом через get запрос к своему собственному серверу с учётом вэйт нетворк полиси. А там сам себе Юи юикс делай. Хоть к телефонии прилепились и при звонке сразу открывается vnc например.

Кстати, кто-нибудь делал такую интеграцию телефонии и хелпдеска? Чтобы при поднятии трубки оператором техподдержки, запускался некий скрипт, который показывал нужную информацию.
У меня все руки чешутся, наваять такой скрипт, который бы через asterisk AMI работал, но должно же быть уже что-то готовое.
У меня на работе подобное реализовано.
При звонке в тех. поддержку автоматически открывается окно подключения по VNC к звонящему. Телефония, правда, не Asterisk.

Сделано всё проще:
echo %date% %time% > \server\reports\users\%username%_%computername%.txt


Пользователей 30 — 80. Способ далеко не лучший, но позволяет найти кто на каком компьютере вошел, в Radmin сделаны папки по отделам.

Поставил PDQ Inventory. Он пытается сканировать все компы в домене от имени той учетной записи которая задаётся у него в настройках. Поставил автоскан раз в пол часа (можно и чаще, если хочется)
В итоге имеем массив компьютеров с отображением залогиненных в данный момент на них пользователей формирующийся в реальном времени. Ну и встроенный поиск работает по всем полям, в т.ч. по логину, по отображаемому имени (на русском), по имени ПК тоже можно но кто и зачем их помнит то…

Там же добавил шорткат который по нажатию Ctrl+1 на комп открывает радмин и параметром передаёт ему имя компа (ну и точно так же Ctrl+2 — радмин но в режиме просмотра)

Вот и всё. Успеваю подключиться еще пока человек не договорил фразу «привет, у меня тут $something не работает».

Помимо задачи из этого поста решается еще тьма всего — какой софт где установлен, какой комп давно не сканируется (=> либо ктото в отпуске либо учетку компа из домена забыли удалить), где какое железо, и еще миллион разных полезных штук. Настоятельно рекомендую.

p.s. а ещё есть PDQ Deploy который позволяет на всё это добро устанавливать пакеты который сам же и собираешь (то ли это установка софта то ли просто смена каких-то настроек).
Хм.
  1. Настраиваем пересылку логов с рабочих станций на сервер. На сервере создаём новый вид (фильтр) журнала, в который будут попадать только эвенты логон и логофф. Профит.
  2. Либо на сервере-сборщике логов настраиваем скрипт отрабатывающий при возникновении событий логон/логофф, который пишет нужную нам информацию туда, куда нам надо.
  3. Либо всё тоже что и в предыдущем варианте, но скрипт отрабатывает на журнале безопасности рабочей станции и всё без сервера-сборщика.


И да, разница в скриптах в предпоследней строке в слове: strTimeStamp & " <logon". И я бы сделал один скрипт но с параметром, так удобней его поддерживать в актуальном варианте, если надо что-то добавить или изменить.
И да, разница в скриптах в предпоследней строке в слове: strTimeStamp & " <logon". И я бы сделал один скрипт но с параметром, так удобней его поддерживать в актуальном варианте, если надо что-то добавить или изменить.

Про это я тоже писал. Принципы DRY & KISS в полный рост.


страиваем пересылку логов с рабочих станций на сервер. На сервере создаём новый вид (фильтр) журнала, в который будут попадать только эвенты логон и логофф. Профит.

Тоже хороший вариант, спасибо за предложение.

Узнаю имя компьютера по фамилии пользователя в корпоративном чате. У нас Miranda + Openfire. Клиент чата устанавливается автоматически, логинится по NTLM. Сотрудники разбиты на группы, в соответствии с названиями их отделов.
Спасибо. Отличное, элегантное решение. Как раз сам собирался найти/сделать что-то подобное, чтобы работало и на старых ОС без powershell.
1. Для удобства можно сделать формочку на PowerShell, куда вводишь фамилию(или часть) пользователя и она выводит список соответствующих пользователей/компьютеров. Тогда информация будет актуальнее.
2. GPO. Как альтернатива, чтобы не использовать loopback. Применять к OU с пользователями, но в фильтрах безопасности указать Domain Users и группу в которую входят все рабочие станции(у нас в такую группу раз в сутки простенький скрипт добавляет все не серверные компьютеры).
3. Из практики:
а) Как писали выше. Когда-то использовал logon скрипт, создававший на шаре файл вида %username%_%computername%.txt. Для не очень больших компаний работающее решение
б) bginfo. И сейчас используется на серверах.
в) Когда работал в it-аутсорсинге, то была схема: на системный блок наклейка с номером техподдежки и id компьютера, взятый из CMDB. С нашей стороны в широко известной немецкой программе для удалённого доступа составлялся список компьютеров. Указывалось имя, пользователь компьютера и id. Поиск быстро позволял найти компьютер по одному из этих параметров, а заодно увидеть в сети компьютер или нет.

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


  • logon/logoff скрипты, пишущие в атрибуты в AD: используются в основном для поиска вторичной машины, где пользователь залогинен и это приносит какие-то проблемы
  • logon/logoff скрипты, пишущие в базу самописной интерактивной карты здания: решение не повсеместное, больше предназначенное для инженеров, решающих проблемы на месте, а не удаленно
  • самописное ПО в трее: повсеместное решение как раз для общения с первой линией поддержки. кроме простоты объяснения как получить информацию о пользователе/компьютере ("наведите мышку на красную иконку с надписью IT у часиков") позволяет пользователю самостоятельно создать обращение в ServiceDesk (с передачей технической информации)
Как реализовано у меня на работе:

  • DesktopInfo с IP-адресами в нижнем левом углу рабочего стола
  • Интеграция с IP-телефонией (при звонке в тех.поддержку автоматически открывается окно подключения по VNC)
  • logon-скрипт, отправляющий имя ПК в «базу»
  • самописный клиент — часть корпоративного прокси, в которой также доступен текущий/последний IP-адрес с коротким интервалом обновления
  • централизованный сбор журналов событий, где также видна история logon/logoff
  • система инвентаризации, с агентами (косвенно, но тоже иногда можно узнать «кто где»)

Когда я начинал работать, из всего этого был только значок VNC в трее (и то не у всех) и клиент прокси, но в системе не было видно именно последнего IP-адреса, поэтому если клиент не запущен, то найти рабочий ПК острудника было весьма проблематично.
Отличное решение из серии «Зачем просто, когда можно сложно»

А в registry в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D} прописать %Username% on %Computername% пробовали?

А за реализацию поставлю твёрдую пятёрку
А в registry в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D} прописать %Username% on %Computername% пробовали?

«Чую, что дело бесовское, но обосновать не могу». Нет, не пробовал, колитесь, в чем гешефт!

А за реализацию поставлю твёрдую пятёрку

Смотрю, вам уже целых две поставили

НЛО прилетело и опубликовало эту надпись здесь
шорткат Windows+Pause

Windows-Break.
Однажды имел лаптоп с разнесением Pause и Break, и таки да… Это не Pause.
Возможно, так оно и есть, но сейчас проверить не на чем. Текст поправил, спасибо.
Не силён в PS, как бы историю сохранять кто где логинился? Подскажите кто нибудь.
Можно сделать так.
На контроллерах домена увеличиваете дефолтный максимальный размер security-лога. Можно с помощью групповых политик сделать.

В планировщик пихаете скрипт, который делает следующее.
1. С помощью командлетов Get-ADDomainController и Get-WinEvent парсит логи на всех контроллерах на предмет события с кодом 4624, учитывая последний EventID, полученный при предыдущем запуске (см. п. 2)

2. Агрегирует, сортирует по времени и сохраняет собранные данные (например, в CSV) и запоминает (сохраняет в файл) EventID для последнего полученного события для каждого из контроллеров

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