— Ой, у меня ничего не работает, помогите!
— Не переживайте, сейчас всё исправим. Назовите имя компьютера…
(классика жанра из звонков в техподдержку)
Хорошо, если у вас есть инструмент а-ля BgInfo или ваши пользователи знают про шорткат Windows+Pause/Break и умеют его нажимать. Встречаются даже редкие экземпляры, которые успели выучить имя своей машины. Но часто у звонящего вдобавок к его основной проблеме появляется вторая: узнать имя/IP-адрес компьютера. И нередко на решение этой второй проблемы уходит куда больше времени, чем первой (а надо было всего лишь обои поменять или вернуть пропавший ярлык :).
А ведь намного приятнее услышать что-то вроде:
— Татьяна Сергеевна, не беспокойтесь, уже подключаюсь…
А надо для этого не так уж и много.
Перед описанием решения, которым мы пользуемся сейчас, я кратко рассмотрю другие варианты, чтобы
- BgInfo, Desktop Info и им подобные. Если много денег, есть и платные. Суть в том, что на десктоп выводится техническая информация: имя машины, IP-адрес, логин и т.д. В Desktop Info можно даже графики производительности запилить на половину экрана.
Не устраивает то, что для того же Bginfo, например, пользователю нужно сворачивать окна, чтобы увидеть нужные данные. Еще мы с коллегами не раз наблюдали у BgInfo характерный артефакт, когда новый текст выводится поверх старого.
Некоторых пользователей раздражает тот факт, что админырисуют пугающее 192.168.0.123 на мордочке растянувшегося на рабочем столе котикапортят эстетику фоновой картинки, и, разумеется, это жутко демотивирует и напрочь убивает рабочий настрой.
- Ярлык а-ля «Кто я» (не пытайтесь добавить ему знак вопроса в конце :). Классический ярлык на рабочем столе, за которым прячется аккуратный или не очень скрипт, выводящий нужную информацию в виде диалогового окна. Иногда вместо ярлыка на рабочий стол кладут сам скрипт, что ИМХО моветон.
Недостаток в том, что для запуска ярлыка, как и в первом случае, нужно сворачивать все открытые окна (баловней судьбы, у которых на рабочей машине открыто единственное окно с пасьянсом, в расчет не берём). Кстати, а ваши пользователи знают, куда нужно тыкнуть, чтобы свернуть все окна?Правильно, пальцем в глаз админу.
Также кэп подсказывает, что у обоих описанных выше способов основной недостаток в том, что в получении информации участвует пользователь,
Вариант с повышением компьютерной грамотности, когда все знают, где в Windows смотреть имя своей машины, рассматривать не буду: дело благородное, но очень трудное. А если в компании текучка кадров, то и вовсе гиблое. Что там говорить, в большинстве случаев и логин-то свой не помнят.
Душу излил, а теперь к делу.
За основу была взята идея хабровчанина mittel из этой статьи.
Суть задумки в том, что при входе пользователя в Windows логон-скрипт заносит нужную информацию (время и имя машины) в определенный атрибут учётной записи пользователя. А при выходе из системы отрабатывает аналогичный логофф-скрипт.
Сама идея мне понравилась, а вот в реализации кое-что не устроило.
- Групповая политика, в которой прописаны логон- и логофф-скрипты для пользователей, применяется ко всему домену, поэтому скрипты будут отрабатывать на любой машине, на которую логинятся пользователи. Если у вас наряду с рабочими станциями используются терминальные решения (например, Microsoft RDS или продукты Citrix), такой подход будет неудобным.
- Данные заносятся в атрибут Department учетной записи пользователя, на который у рядового пользователя есть доступ только на чтение. Помимо атрибута учётной записи пользователя, скрипт также вносит изменения в атрибут Department учётной записи компьютера, который по умолчанию пользователи также менять не могут. Поэтому чтобы решение работало, автор предлагает изменить стандартые настройки безопасности для объектов AD.
- Формат даты зависит от настроек локализации на конечной машине, поэтому с одной машины можем получить 10 ноября 2018 14:53, а с другой 11/10/18 2:53 p.m.
Для устранения этих недостатков было сделано следующее.
- GPO линкуется не к домену, а к OU с машинами (я разделяю пользователей и машины по разным OU и другим советую). При этом для loopback policy processing mode выставлен режим merge.
- Скрипт будет заносить данные только в учетную запись пользователя в атрибут Info, который пользователь может менять самостоятельно для своей учётной записи.
- Изменен кусок кода, генерирующий значение атрибута
Теперь скрипты выглядят так:
On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logon>" & " @ " & strComputerName
oUser.Setinfo
On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logoff>" & " @ " & strComputerName
oUser.Setinfo
Кто первым найдет все отличия между логон- и логофф-скриптом, тому плюс в карму. :)
Также для получения наглядной информации создан такой небольшой PS-скрипт:
$OU = "OU=MyUsers,DC=mydomain,DC=com"
Get-ADUser -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait
Итого всё настраивается на раз-два-три:
- создаем GPO с нужными настройками и линкуем его к подразделению с рабочими станциями пользователей:
- идем пить чай (если AD с большим количеством пользователей, то чая нужно много :)
- запускам PS-скрипт и получаем результат:
В верхней части окна есть удобный фильтр, в котором можно отбирать данные по значениям одного или нескольких полей. Клик по столбцам таблицы сортирует записи по значениям соответствующих полей.
Можно красиво «упаковать» наше решение.
Для этого добавим ярлык для запуска скрипта специалистам техподдержки, у которого в поле «объект» будет что-то такое:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "\\server\share\Scripts\Get-UsersByPCsInfo.ps1"
Если сотрудников техподдержки много, то можно раздать ярлык с помощью GPP.
Несколько замечаний напоследок.
- На машине, откуда запускается PS-скрипт, должен быть установлен модуль Active Directory для PowerShell (для этого достаточно добавить средства администрирования AD в компонентах Windows).
- бОльшую часть атрибутов своей учётной записи пользователь по умолчанию редактировать не может. Учитывайте это, если решите использовать атрибут, отличный от Info.
- Проинформируйте всех причастных коллег о том, какой атрибут будете использовать. Например, тот же Info используется для интерактивного добавления заметок к ящику пользователя в админке Exchange Server и кто-то легко может его затереть, либо опечалился, когда добавленную им информацию затрет ваш скрипт.
- Если у вас несколько сайтов Active Directory, то делайте поправку на задержки репликации. Например, если вы хотите получить актуальную информацию о пользователях с AD-сайта A, а запускаете скрипт с машины из AD-сайта B, то можно сделать так:
Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait
DCfromSiteA — имя контроллера домена сайта A (по умолчанию командлет Get-AdUser подключается к ближайшему контроллеру домена)
Источник картинок
Буду признателен, если вы пройдете короткий опрос ниже.
Комментарии (69)
200sx_Pilot
05.09.2019 21:56Инвентарный номер не подойдёт?
вида «организация.отдел.сотрудник».perlestius Автор
05.09.2019 22:19Не совсем понял мысль. Можно подробнее?
200sx_Pilot
05.09.2019 23:26в крупных предприятиях кодируются структурные подразделения.
1.технологи
2.производство.
…
5.бухгалтерия
…
9.отдел энергетика
на компе наклейка «12.7.21»
На русском означает «администрация.клининг-менеджер.Марина»
в саппорте по наклейке карточка компа, привязанная к карточке сотрудника, в которой есть в т.ч. номер мобильного, с которого Марина может позвонить, номер её местного телефона.
а в карточке — всё, чего душа пожелает, включая температуру дисков и обороты вентилятора БП.
зы: это для первой части задачи и чтобы не усложнять qr кодами.
чёй-то «предпросмотр» и «отправить» неактивны… :(perlestius Автор
05.09.2019 23:50Идея интересная, но за актуальностью таких наклеек надо следить, что в наших реалиях не всегда возможно. Да и человеческий фактор никто не отменял: компьютеры сотрудникам поменяли, а наклейки забыли.
Rim13
06.09.2019 09:54Если внутренние номера статичны, то привязку к ним можно делать, в плане определения имя компа.
andToxa
06.09.2019 17:03а если ПК заливаются с помощью WDS/SCCM и имена генерируются автоматически?
а если завтра бухгалтерия решит поменять формат инвентарных номеров (с 1234 на 60402-1234)?
fessmage
07.09.2019 07:28Как раз использовал схему с инвентарным номером. При подготовке каждого ПК перед сдачей в работу на него клеился на видном для пользователя месте инвентарник, а имя ПК задавалось по стандарту "номер офиса-инвентарный номер". Соответственно при обращении просто спрашивали откуда человек звонит и просили продиктовать номер с наклейки.
Зачем добавлять в номер еще конкретного сотрудника — не очень понятно, ведь он сегодня за одним ПК, а завтра в другом офисе за другим.
Но это не отменяет удобства хранения информации о логинах в AD в удобном виде — когда нужно что-то сделать без присутствия человека (например ушел на обед, отправив тикет). И странно что в AD до сих пор нет удобного места для хранения и просмотра такой информации — либо парсить логи входа на всех контроллерах и агрегировать, либо как у автора — кастомные логон скрипты и кастомное поле у пользователя.
AkshinM
05.09.2019 22:02stratofort
05.09.2019 23:11Вот со всеми описаниями http://winitpro.ru/index.php/2019/08/13/set-adcomputer-powershell/
Я немного по другому делаю. Оно ещё в базу пишет.
stratofort
05.09.2019 22:11Хм. Логон и логофф скрипт. Отдельно на машины отдельно на юзверя. Работает 7 лет. В оснастке Ad видно кто на какой машине. Только права раздать на атрибуты правильно нужно. И вообще политики не на весь домен можно кидать. А на отдельные ou
perlestius Автор
05.09.2019 22:16Интересно взглянуть на Ваши логон/логофф-скрипты для машины. Каким образом машина узнает, кто на ней залогинен с учетом того, что сначала отрабатывает логон-скрипт для машины, а уже потом для пользователя?
stratofort
05.09.2019 23:13Вот со всеми описаниями http://winitpro.ru/index.php/2019/08/13/set-adcomputer-powershell/
Я немного по другому делаю. Оно ещё в базу пишет
perlestius Автор
05.09.2019 23:41В самом начале статьи по Вашей ссылке:
Командлет Set-ADComputer входит в состав модуля Active Directory для PowerShell и требует наличие установленного модуля на компьютере.
У Вас на всех рабочих станциях ADUC установлен?
VBS-скрипты из моего решения этого не требуют, будут запускаться даже на старых ОС, а скорость выполнения будет значительно выше, чем у их PS-аналогов из Вашей статьи.
И, как я писал выше с статье, вот эта модификация мне не очень нравится:
В первую очередь необходимо делегировать права группе Domain Users (или другой группе безопасности пользователей) на OU с компьютерами на изменение значений в полях объктов типа Computer: ManagedBy и description (Write Description + Write Managed By).
В моём же варианте всё работает «из коробки», со стандартными настройками безопасности.stratofort
06.09.2019 11:02Это ссылка для примера была.
У меня тоже через 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
ryo_oh_ki
05.09.2019 22:19В Security EventLog'а пишется событие ID 4624 (4625) с информацией о логине пользователя, если включить «Audit logon events» в полиси.
P.S. На компьютер может быть залогинено несколько пользователей одновременно.perlestius Автор
05.09.2019 22:25В Security EventLog'а пишется событие ID 4624 (4625) с информацией о логине пользователя, если включить «Audit logon events» в полиси.
Вы пробовали парсить Security-логи, скажем, для организации, где тысяча пользователей и с десяток контроллеров домена?
P.S. На компьютер может быть залогинено несколько пользователей одновременно.
И что из этого следует?ryo_oh_ki
05.09.2019 22:34PowerShell позволяет. Но если контроллеров действительно много и пользователь может логиниться на любом, что странно… то посоветую запускать скрипты параллельно удалёно на каждом (например, Invoke-Command), а не один скрипт, чтобы не пересылать логи со всех на свой.
perlestius Автор
05.09.2019 23:56и пользователь может логиниться на любом, что странно…
Что тут странного? Это стандартное поведение AD.
то посоветую запускать скрипты параллельно удалёно на каждом
Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?ryo_oh_ki
06.09.2019 06:36Что тут странного? Это стандартное поведение AD.
Странно не поведение AD, а то, что, по озвученным вами условиям, любой может залогинится при помощи любого из десятка AD, и складывается впечатление, что в вашей организации много контроллеров без географического разделения (т.е. без необходимости).
Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?
Что вас пугает в параллельном запуске скриптов на контроллерах?
И что из этого следует?
Так как вы в вашем скрипте решили проблему одновременного логина пользователя на нескольких машинах? Ведь, если не ошибаюсь, то новый логин будет перезаписывать атрибут со старым, но ещё актуальным логином.
(Типичный пример в сетях 1Г и строже: пользователь имеет личную машину, но для вывода информации должен приходить со своей флешкой на машину с открытыми USB-портами).perlestius Автор
06.09.2019 07:51складывается впечатление, что в вашей организации много контроллеров без географического разделения (т.е. без необходимости).
Совсем нет. К примеру, 5 площадок с парой DC в каждой.
Что вас пугает в параллельном запуске скриптов на контроллерах?
Я не про параллельный запуск, а вообще про парсинг. Не пугает ничего,, если это не в моей AD творится. :) Парсинг таких логов — ресурсоёмкая операция, и я бы не стал на DC ее запускать. Как Вы планируете это реализовать на практике? Вручную по мере надобности? По расписанию автоматом? За какой период будете смотреть, как и куда выгружать результаты?
Ведь, если не ошибаюсь, то новый логин будет перезаписывать атрибут со старым, но ещё актуальным логином.
Да, всё верно.
пользователь имеет личную машину, но для вывода информации должен приходить со своей флешкой на машину с открытыми USB-портами
Согласен, есть нюансы.
Как вариант. Кладём учётку такой «открытой» машины в отдельный OU, к которому не применяется GPO. В случае проблем на этой машине пользователь сообщает, что, мол, я сейчас не за своим ПК, а за «открытым». Техподдержка со своей стороны видит имя этой машины в ADUC. Либо на самой машине есть наклейка с номером/сетевым именем (если машин несколько).gecube
06.09.2019 09:04Да, всё верно.
Но это же убивает изначальную идею на корню!?
Насчёт секьюрити — ивентов. Нет проблемы, если Вы их парсите и складываете в отдельный сторедж, а потом уже именно его опрашиваете. Минус такого решения, что нужно тащить ещё один компонент. В этом отношении ps-скрипты попросту выглядят проще (но совершенно необязательно, что это более хороший способ).
И если уж так рассуждать, то почему обязательно на АД садиться? Во многих компаниях есть что-то вроде Корп портала или системы учёта времени сотрудников. Вот по Корп порталу можно отследить кто и с какой машины залогинился (по айпи). Я не скажу, что это сильно лучше, чем с АД, но как вариант — почему нет?
perlestius Автор
06.09.2019 09:18Но это же убивает изначальную идею на корню!?
Почему Вы так считаете? Задача — оперативно узнать, за какой машиной сейчас работает пользователь, чтобы удаленно подключиться/выполнить диагностику. Сбор истории — это уже другая задача.
И если уж так рассуждать, то почему обязательно на АД садиться?
Описанное в статье решение для тех, кто уже «сидит» на AD, и оно позволяет добавить нужный функционал в уже работающую систему с минимальными трудозатратам. Если же инфраструктура поднимается с нуля, то, конечно, возможны варианты.gecube
06.09.2019 09:26Почему Вы так считаете? Задача — оперативно узнать, за какой машиной сейчас работает пользователь, чтобы удаленно подключиться/выполнить диагностику. Сбор истории — это уже другая задача.
Потому что если у пользователя две активные сессии, то Вы об этом не узнаете.
Что хуже — если пользователь залогинился на компе А, потом на компе Б, а потом разлогинился на Б, но продолжил работу на А, то Вы об этом тем более не узнаетеAAT666
06.09.2019 09:44Да, скрипты неплохо бы дописать чтобы в атрибуты машины тоже заносилась информация по вошедшему/вышедшему пользователю. У нас так сделано.
perlestius Автор
06.09.2019 09:50Отслеживание таких гиперактивных пользователей — это уже другая задача. Решение, кстати, тоже есть, но оно выходит за рамки статьи. Возможно, опишу отдельно.
Но если у вас много таких людей, которые параллельно за несколькими машинами работают, возможно, имеет смысл подойти с другой стороны и пересмотреть процессы для них?gecube
06.09.2019 10:01Почему гиперактивных?
это уже другая задача.
И да, и нет.
Но если у вас много таких людей, которые параллельно за несколькими машинами работают, возможно, имеет смысл подойти с другой стороны и пересмотреть процессы для них?
Процессы чего, простите? Поддержки? Вам просто указали на недостаток Вашей системы — она в определенных случаях может давать недостоверные данные. Решение есть у коллеги ниже — самое правильное — https://habr.com/ru/post/463579/?reply_to=20592497#comment_20592363
alex-khv
06.09.2019 09:08"Еще раз спрошу: Вы пробовали это в продакшне делать в крупной или хотя бы средних размеров организации перед тем, как подобные советы давать?"
Я делал несколько скриптов. Несколько тысяч пользователей. Больше сотни географически распределенных DC. Парсинг журналов DC. Раз в час параллельно парсились все журналы. В фильтре можно указать с какого времени читать файл. По id записи убиралось дублирование. Завели отдельную ВМ для этого. Запись в ms sql. Потом переделал на elastic search. Помимо этого ещё много чего собиралось с журналов. И не только с журналов безопасности. Например журналы direct access, rds gateway. Плюс раз в день опрос всех машин на список ПО. Все максимально параллезировалось. Пока хватит свободной памяти. Только через posh и wmi. И ещё много ещё чего. Брат жив.
perlestius Автор
06.09.2019 09:32Но согласитесь, такое такое решение требует больше ресурсов и времени (если оно не было внедрено ранее), когда конечная цель весьма скромная.
gecube
06.09.2019 10:03Мне кажется, что возможность отследить кто на какой машине является не основным эффектом этой системы, а побочным артефактом, хоть и довольно удобным. Зачем такое может понадобиться? Да для мониторинга тех же всплесков активностей хакеров по неуспешным security событиям. Такой вот недо-SoC.
muon
06.09.2019 11:06Вы пробовали парсить Security-логи, скажем, для организации, где тысяча пользователей и с десяток контроллеров домена
ADAudit успешно парсит, а если деньги важнее времени, то Powershell по расписанию сделает то же.
Но ламповой практической админской статье — лайк. Пользовался похожими скриптами на прошлой работе (было сделано до меня), только те скрипты писали не в AD, а в общую папку, что снимало проблему с перезаписью актуальных данных.
T64_72
06.09.2019 01:19Хорошая статья :) Как раз по этой теме сегодня на работе была заморочка.
Разница в скриптах
«n» — «ff» (logon — logoff)perlestius Автор
06.09.2019 01:21А Вы наблюдательный. :)
gecube
06.09.2019 09:05+1А почему не сделать один скрипт, а logon/logoff вынести как параметр?
perlestius Автор
06.09.2019 09:41Мне показалось удобнее так. Но ничто не мешает сделать с параметрами. Как говорится, на вкус и цвет… все фломастеры разные
szelga
06.09.2019 07:00если 100500 машин и пользователей, то можно поставить какой-нибудь fusioinventory, который будет следить и за этим, и за многим другим.
Andrusha
06.09.2019 08:01+1Я в своё время делал подобное как раз с помощью упомянутого вами BgInfo — в нём, помимо вывода информации на рабочий стол, есть возможность при запуске заносить эту же информацию в файл на сетевой шаре или в базу данных.
lATEuCTl
06.09.2019 08:05Решили проблему с именами проще:
Имя пк соответствует имени пользователя, а имя пользователя в виде ФамилияИО.
Для совсем тяжёлых случаев распространяем групповой политикой rainmeter (отбражает инфу на рабочем столе, не затрагивая обои) с информацией «имя пк, имя пользователя, ip, домен, ОС и её разрядность».perlestius Автор
06.09.2019 08:15ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров. Замучаетесь переименовать и всё равно не уследите в итоге.
Для совсем тяжёлых случаев…
Тяжёлые — это какие, например?lATEuCTl
06.09.2019 08:29ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров. Замучаетесь переименовать и всё равно не уследите в итоге.
В любом случае, с приходом нового пользователя, ПК нужно настроить. Переименование занимает не так много времени, зато соблюдается порядок.
Тяжёлые — это какие, например?
Когда имя ПК по какой-то причние не соответствует имени пользователя =) Обычно если одним ПК пользуются несколько человек, либо сотрудник, настраивающий ПК забыл\забил на преименование. Но ставим софтину всем пользователям — на всякий «тяжелый» случай.
З.Ы. В домене примерно 1.5к ПК.gecube
06.09.2019 09:06любом случае, с приходом нового пользователя, ПК нужно настроить.
Не нужно. Перемещаемые профили? vdi? И пускай работает себе.
fessmage
07.09.2019 07:45Зачем настраивать ПК под нового пользователя? Софт стандартный, настройки почта и т.д. ярлыки — подтягиваются из политики при логине. Документы на общем сетевом диске, с правами доступа по группам AD и с авто монтированием той же политикой.
И пусть пересаживаются хоть каждый день все.lATEuCTl
07.09.2019 08:20Как раз-таки на компах довольно часто ставится специализированное программное обеспечение, которое может быть установлено не у всех сотрудников отдела, ЭЦП, средства от НСД и прочие прелести госслужбы.
fessmage
07.09.2019 09:03Ага, ну это уже специфика начинается, у меня таких было мало, в отдельных отделах, и да, там более индивидуальный подход уже.
gecube
06.09.2019 09:08ИМХО, называть ПК по имени пользователя — путь в никуда, если у вас много пользователей/ПК и большая текучка кадров.
Т.е. чуть чаще, чем всегда ) полностью согласен. Имя компа должно содержать инвентарный номер (PC-12345678 подойдёт), может кодировать тип оборудования или его местоположение (PC-MSK-01-3000)
TheStarOf
06.09.2019 08:26Собирать онлогон скриптом через get запрос к своему собственному серверу с учётом вэйт нетворк полиси. А там сам себе Юи юикс делай. Хоть к телефонии прилепились и при звонке сразу открывается vnc например.
Naves
06.09.2019 10:44Кстати, кто-нибудь делал такую интеграцию телефонии и хелпдеска? Чтобы при поднятии трубки оператором техподдержки, запускался некий скрипт, который показывал нужную информацию.
У меня все руки чешутся, наваять такой скрипт, который бы через asterisk AMI работал, но должно же быть уже что-то готовое.Renaissance
06.09.2019 18:16У меня на работе подобное реализовано.
При звонке в тех. поддержку автоматически открывается окно подключения по VNC к звонящему. Телефония, правда, не Asterisk.
YMax
06.09.2019 09:01Сделано всё проще:
echo %date% %time% > \server\reports\users\%username%_%computername%.txt
Пользователей 30 — 80. Способ далеко не лучший, но позволяет найти кто на каком компьютере вошел, в Radmin сделаны папки по отделам.
paranoya_prod
06.09.2019 09:34+1Хм.
- Настраиваем пересылку логов с рабочих станций на сервер. На сервере создаём новый вид (фильтр) журнала, в который будут попадать только эвенты логон и логофф. Профит.
- Либо на сервере-сборщике логов настраиваем скрипт отрабатывающий при возникновении событий логон/логофф, который пишет нужную нам информацию туда, куда нам надо.
- Либо всё тоже что и в предыдущем варианте, но скрипт отрабатывает на журнале безопасности рабочей станции и всё без сервера-сборщика.
И да, разница в скриптах в предпоследней строке в слове: strTimeStamp & " <logon". И я бы сделал один скрипт но с параметром, так удобней его поддерживать в актуальном варианте, если надо что-то добавить или изменить.gecube
06.09.2019 10:04И да, разница в скриптах в предпоследней строке в слове: strTimeStamp & " <logon". И я бы сделал один скрипт но с параметром, так удобней его поддерживать в актуальном варианте, если надо что-то добавить или изменить.
Про это я тоже писал. Принципы DRY & KISS в полный рост.
страиваем пересылку логов с рабочих станций на сервер. На сервере создаём новый вид (фильтр) журнала, в который будут попадать только эвенты логон и логофф. Профит.
Тоже хороший вариант, спасибо за предложение.
yurybx
06.09.2019 09:41Узнаю имя компьютера по фамилии пользователя в корпоративном чате. У нас Miranda + Openfire. Клиент чата устанавливается автоматически, логинится по NTLM. Сотрудники разбиты на группы, в соответствии с названиями их отделов.
Warlok9OOO
06.09.2019 10:27Спасибо. Отличное, элегантное решение. Как раз сам собирался найти/сделать что-то подобное, чтобы работало и на старых ОС без powershell.
1. Для удобства можно сделать формочку на PowerShell, куда вводишь фамилию(или часть) пользователя и она выводит список соответствующих пользователей/компьютеров. Тогда информация будет актуальнее.
2. GPO. Как альтернатива, чтобы не использовать loopback. Применять к OU с пользователями, но в фильтрах безопасности указать Domain Users и группу в которую входят все рабочие станции(у нас в такую группу раз в сутки простенький скрипт добавляет все не серверные компьютеры).
3. Из практики:
а) Как писали выше. Когда-то использовал logon скрипт, создававший на шаре файл вида %username%_%computername%.txt. Для не очень больших компаний работающее решение
б) bginfo. И сейчас используется на серверах.
в) Когда работал в it-аутсорсинге, то была схема: на системный блок наклейка с номером техподдежки и id компьютера, взятый из CMDB. С нашей стороны в широко известной немецкой программе для удалённого доступа составлялся список компьютеров. Указывалось имя, пользователь компьютера и id. Поиск быстро позволял найти компьютер по одному из этих параметров, а заодно увидеть в сети компьютер или нет.
andToxa
06.09.2019 14:37Порядка нескольких тысяч пользователей, большей частью мигрирующих по рабочим местам либо логинящихся больше, чем на одном.
Применяется:
- logon/logoff скрипты, пишущие в атрибуты в AD: используются в основном для поиска вторичной машины, где пользователь залогинен и это приносит какие-то проблемы
- logon/logoff скрипты, пишущие в базу самописной интерактивной карты здания: решение не повсеместное, больше предназначенное для инженеров, решающих проблемы на месте, а не удаленно
- самописное ПО в трее: повсеместное решение как раз для общения с первой линией поддержки. кроме простоты объяснения как получить информацию о пользователе/компьютере ("наведите мышку на красную иконку с надписью IT у часиков") позволяет пользователю самостоятельно создать обращение в ServiceDesk (с передачей технической информации)
Renaissance
06.09.2019 18:41Как реализовано у меня на работе:
- DesktopInfo с IP-адресами в нижнем левом углу рабочего стола
- Интеграция с IP-телефонией (при звонке в тех.поддержку автоматически открывается окно подключения по VNC)
- logon-скрипт, отправляющий имя ПК в «базу»
- самописный клиент — часть корпоративного прокси, в которой также доступен текущий/последний IP-адрес с коротким интервалом обновления
- централизованный сбор журналов событий, где также видна история logon/logoff
- система инвентаризации, с агентами (косвенно, но тоже иногда можно узнать «кто где»)
Когда я начинал работать, из всего этого был только значок VNC в трее (и то не у всех) и клиент прокси, но в системе не было видно именно последнего IP-адреса, поэтому если клиент не запущен, то найти рабочий ПК острудника было весьма проблематично.
andreysl
06.09.2019 21:44Отличное решение из серии «Зачем просто, когда можно сложно»
А в registry в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D} прописать %Username% on %Computername% пробовали?
А за реализацию поставлю твёрдую пятёркуperlestius Автор
06.09.2019 23:04А в registry в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D} прописать %Username% on %Computername% пробовали?
«Чую, что дело бесовское, но обосновать не могу». Нет, не пробовал, колитесь, в чем гешефт!
А за реализацию поставлю твёрдую пятёрку
Смотрю, вам уже целых две поставилиdmitrymaximov750546
09.09.2019 14:29Так ведь в Windows 10 по умолчанию нет иконки «мой компьютер» на рабочем столе…
EndUser
07.09.2019 08:46шорткат Windows+Pause
Windows-Break.
Однажды имел лаптоп с разнесением Pause и Break, и таки да… Это не Pause.perlestius Автор
07.09.2019 10:33Возможно, так оно и есть, но сейчас проверить не на чем. Текст поправил, спасибо.
Dimtry44
1. Попросить пользователя выключить и включить компьютер, по информации из AD существенно сузится круг подозреваемых. Если у вас не тысячи пользователей в этом офисе или это не в девять утра, то по идее должно быть достаточно для идентификации пользователя.
2. Для полу-оффлайн режима (когда компьютер кажется работает, а монитор/мышь/клавиатура не очень), на мородочку/бока всем компьютерам налепить QR код с ссылкой, попросить пользователя сфотать телефоном и перейти по ссылке. Ссылка содрежит уникальное имя компьютера. Можно вдобавок иметь на этом иметь цифровой код ассоциированный с компьютером, который пользователь может прочитать по телефону.
Miller777
1. представил себе буха в разгар рабочего дня. открыто 3 базы 1С,5 таблиц в Excel, отчётность, «консультант плюс» и прочее. И тут вы ей предлагаете выключить компьютер…
2. Overhead. А чего на наклейке сразу имя ПК не писать?
Dimtry44
По-русски имена компьютерам не дают, а по английски будет куча ошибок при попытке его прочитать, особенно если система именования не продумана. А цифры проще, плюс можно две последние оставить для контрольной суммы, чтобы сразу было понятно что ошибка где-то закралась.
andToxa
бухи бывают разные… а если у него отчет в это время в фоне в ЦБ формируется/отправляется? или проводки по реестру от яндекс.такси?
в организации с 20+ работниками это работает максимум полгода
gecube
А как насчет того, что после перезагрузки бух не сможет повторить дефект? Вообще гениальное предложение. А что? Действительно — сломалось что-то — выключи — включи.
Miller777
Насчет 2-го — согласен. Наелся этого по уши, когда тебе начинает по телефону диктовать пароль к TeamViewer человек, у которого очень плохо с английским. Игра «угадай пароль».
Насчет первого — не соглашусь. Когда у бухов разгар работы — им бывает вообще не оторваться. Некритичные ошибки и проблемы откладываются на потом.
andToxa
если речь, про TeamViewer, то пусть уж тогда вам пароль через вацап отправляют. там и запоминать не надо.
ps: имхо мы отошли от изначальной постановки задачи (узнать имя ПК пользователем или админом).