Как я могу автоматически выйти из системы с Windows-компьютера?

9

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

Можно ли автоматически выходить из системы с пользователей, если они не были активными в течение 24 часов?


Как вариант, можно ли выйти из системы, кроме текущего пользователя, в полночь?

Компьютер находится в доменной сети Windows - хотя я хочу, чтобы автоматический выход из системы работал только на одной машине (я не являюсь сетевым администратором)

,

Jonas
источник
1
Это доменная сеть Windows?
Моав
@Moab: компьютер находится в доменной сети Windows - хотя я хочу, чтобы автоматический выход из системы работал только на одном компьютере (и я не являюсь сетевым администратором).
Джонас
@ Jonas, Ваш выбор слов делает его похожим на несколько компьютеров, вы можете отредактировать свой оригинальный пост, чтобы включить эту новую информацию.
Моав
@Moab: я пытался уточнить вопрос. Это лучше?
Джонас
Это сейчас, посмотрите.
Моав

Ответы:

6

Чтобы выйти из системы отключенных пользователей, оставив текущего пользователя подключенным, скопируйте следующий код сценария в файл .cmd, например «LogOffUsers.cmd», а затем запустите его как службу в полночь:

@echo off
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do logoff %%b

Сценарий работает, используя команду запроса, чтобы найти отключенных пользователей, выполнив поиск по фразе «диск», а затем выйдя из системы.

Если вы хотите, чтобы скрипт вместо этого работал непрерывно как служба, регистрируя пользователей, когда они были отключены / неактивны в течение определенного периода времени, вы должны использовать:

@echo off
:Top
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else %%e GTR 32 (logoff %%b)
choice /T 120 /C 1 /D 1 /N
goto top

Этот сценарий использует ту же команду запроса, но дополнительно проверяет часть результатов «ВРЕМЯ ПРОДОЛЖЕНИЯ», регистрируя пользователя, если время простоя превышает 32 («GTR 32»). Эта фраза встречается дважды, потому что жетон «ВРЕМЯ ПРОДОЛЖЕНИЯ» может встречаться в двух разных позициях Затем строка, начинающаяся с «выбора», ждет 2 минуты, а затем снова выполняет операцию, возвращаясь к началу. Вы можете увеличить или уменьшить значение «32» в соответствии с вашими потребностями.

Нашел здесь .

eMansipater
источник
@eMansipater: Не могли бы вы объяснить, что это делает, и где я могу установить эти 24 часа?
Джонас
1
Лучшее решение - отключить быстрое переключение пользователей, это приведет к выходу из системы, прежде чем новый пользователь сможет войти в свою учетную запись.
Моав
1
@Moab отключение быстрого переключения пользователей означает, что не администратор не может войти в систему, если предыдущий пользователь заблокировал экран. @Jonas Мудрый вопрос - бит в скобках использует команду запроса от support.microsoft.com/kb/186592, чтобы найти отключенных пользователей, выполнив поиск по фразе «диск», а затем выйдя из системы. Команда выбора ожидает выполнения операции только каждые 2 минуты. Опция 24 часа не нужна, поскольку этот скрипт должен выходить из системы только в том случае, если другой пользователь уже вошел в систему.
eMansipater
1
@Jonas командный файл использует «%% a», но чтобы сделать то же самое в командной строке, вместо этого введите «% a» - это должно помочь при отладке. У меня нет машины с Windows, на которой можно было бы примерить сценарий, так что в этом может быть что-то не так. Вы можете попробовать изменить команды «GTR 32 (logoff %% b)» на «echo logoff %% b» без кавычек или на «echo logoff% b» без кавычек, если ввести его. Таким образом, он выведет пользователи пытаются выйти из системы. Если он печатает мусор или ничего, это покажет, что сценарий искажен. Боюсь, я не знаю на выходе формат «запроса», чтобы проверить это.
eMansipater
1
@Jonas У меня была возможность перепроверить выходные данные команды запроса, и эти части сценария были таковы, что выход из системы происходил только в том случае, если пользователь простаивал в течение заданного периода времени. «if %% d GTR 32» означает запуск команды выхода из системы, если токен %% d больше 32. В зависимости от использования удаленного рабочего стола и т. д. токен «ожидания» может появляться в двух местах, поэтому сценарий проверяет оба сценария. Ваша измененная версия просто выходит из системы любого незанятого пользователя, независимо от того, сколько времени прошло. Если я могу добраться до машины с Windows, я могу проверить синтаксис.
eMansipater
1
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else (if %%e GTR 35 (logoff %%b))

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

for /f "tokens=1-8 delims=,:/ " %%a in ('query user ^| find /i "disc"') do if %%d GTR 23 (if %%h GTR 2012 (logoff %%b))

Измените 23, чтобы настроить часы, выше будет работать в течение 24 часов или более простоя. %% h 2012 гарантирует, что значение %% d является часом, а не минутным значением.

MOB
источник
0

Я бы искал способ отключить функцию «Сменить пользователя». Это может помочь.

Волшебник Пранг
источник
Мне действительно нравится функция «переключение пользователей»: таким образом, тот, кто выполняет длинные вычисления, не блокирует использование компьютера другими пользователями.
Джонас