Немного предыстории:
В моей компании у нас есть примитивное приложение (которое может быть открыто только с нескольких компьютеров в нашей сети), которое отслеживает и позволяет останавливать, запускать наши пользовательские исполняемые файлы,вывод из-под контроля сторожевого устройства и т. д.
Я разработал решение, которое запускает пакетный файл при каждом запуске или перезапуске процесса.Этот пакетный скрипт очень прост, все, что он в данный момент делает, это помещает запись в журнал событий Windows, сообщающий нам имя перезапущенного процесса.
Первый аргумент - это тип события, а второй - этоимя процесса.
См. ниже:
if "%1%" == "restart" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 restarted!"
) else if "%1%" == "timeout" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 timed out!"
)
Это прекрасно работает, но, к сожалению, это примитивное приложение не может указать (если пользователь вручную перезапустил процесс вместо сторожевого таймера, перезапускающего его автоматически) имя пользователя, который перезапустил процесс.
Так что моя идея состоит в том, чтобы добавить несколько строк в этот пакетный скрипт, чтобы получить список всех пользователей на всех машинах (есть только несколько возможных машин), у которых есть этотПримитивное приложение, открытое в то время.Поскольку это приложение редко оставляют открытым, вероятно, что оно сузит его до одного пользователя, но даже если будет возвращено несколько пользователей, я, по крайней мере, знаю, что это был один из них, а не понятия не имею.
Итак, я хочу что-то вроде этого:
if "%1%" == "restart" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 restarted!"
) else if "%1%" == "timeout" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 timed out!"
)
REM Code to find all users on all machines who have this application open
eventcreate /L Application /SO Watchdog /T Information /id 219 /D "<list of users>"
Я прочитал несколько вопросов по SO, и я нашел эту команду, которая перечисляет всех пользователей для определенного сервера:
qwinsta /server:<server name>
Иэта команда получит список всех экземпляров приложения, открытого на текущем сервере:
tasklist /fi "imagename eq <exe name>.exe"
Но мне трудно связать эти две команды, чтобы получить полный список пользователей на выбранных машинах с этим конкретнымПриложение открыто.