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

16147
Jonas

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

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


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

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

,

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

3 ответа на вопрос

5
eMansipater

In order to log out disconnected users while leaving the current user connected, copy the following script code into a .cmd file such as "LogOffUsers.cmd" and then run it as a service at midnight:

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

The script works by using the query command to find users who are disconnected by searching the phrase "disc", then logging them out.

If you wanted the script to instead run continuously as a service, logging out users when they had been disconnected/inactive for a certain period of time, you would instead use:

@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 

This script uses the same query command, but additionally checks the "IDLE TIME" portion of the results, logging the user off if idle time is greater than 32 ( "GTR 32" ). That phrase occurs twice because the "IDLE TIME" token can occur two slightly different positions. Then the line beginning with "choice" waits 2 minutes before performing the operation again by looping to the beginning. You can increase or decrease the "32" value according to your needs.

Found here.

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

0
Wizard Prang

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

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