Как определить, что пользователь печатает в консоли, а не в фоновой задаче, используя BATCH-команды?

Я хотел бы знать, как определить, есть ли человек за компьютером, который использует терминал/консоль Windows Server для запуска набора сценариев BATCH, или есть ли автоматическая фоновая задача, которая запускает эти сценарии. Я должен обнаружить это с помощью простого пакетного сценария.

Я искал в Интернете возможные различия между этими двумя типами «пользователей», но не могу найти ничего полезного. Любое решение приветствуется: захват нажатия клавиш, перенаправление стандартного ввода, идентификаторы сеансов терминала/консоли и т. д. Я пробовал все это, но до сих пор не смог добиться успеха.

Решение должно работать на Windows Server 2003, 2008 и 2008 R2. Но для начала я был бы более чем счастлив увидеть, что он работает только на WS 2003.

Заранее спасибо за ваши ответы!


person user1375295    schedule 04.05.2012    source источник


Ответы (2)


Кажется, я не совсем понимаю, что вы имеете в виду под "как определить, есть ли человек за компьютером". Однако в этом сообщении есть способ обнаружить если STDIN был перенаправлен на файл на диске, это может означать, что никто не вводит ввод в этот пакетный файл, а был запущен автоматически. Например:

TypeOfHandle 0
if %errorlevel% geq 128 (
    rem STDIN redirected to disk file
    echo This program must be executed in interactive (not predefined-input) way^!
    goto :EOF
)
set /P input=Enter input please: 
etc...

Я надеюсь, что это помогает...

person Aacini    schedule 06.05.2012
comment
+1, Но я не уверен, что ввод будет перенаправлен, я предполагаю, что пакет будет просто запущен пользователем или каким-то автоматическим типом autostart - person jeb; 07.05.2012
comment
Кстати. Вы должны избежать последней скобки в вашем echo ... (not predefined-input^) way^! - person jeb; 07.05.2012

If /i "%cmdcmdline:~0,6%"=="cmd /c" pause

Как правило, это верно для пакетных файлов, по которым выполняется двойной щелчок.

@for /f "tokens=10* delims=," %A in ('tasklist /fi "SESSION ne 1" /fi "imagename eq cmd.exe" /v /nh /fo CSV') do echo %A

Отобразит заголовок cmd, работающий в других сеансах.

person Noodles    schedule 25.09.2014