Як я можу автоматично виходити з машини з машини Windows?


9

Я хотів би переконатися, що люди вийшли із системи, коли вони закінчили працювати на одній, певній багатокористувацькій машині. В даний час наступний користувач просто "перемикає користувача" і продовжує працювати, але, коли багато користувачів одночасно ввійшли в систему при відкритих програмах, схоже, витрачаються ресурси.

Чи можливо автоматично виходити з машини користувачів, якщо вони не були активними протягом 24 годин?


Можна також виходити серед півночі всіх, крім поточного користувача?

Комп'ютер знаходиться в доменній мережі Windows - хоча я хочу, щоб автоматичний вихід із системи працював на одній машині (і я не адміністратор мережі)

.


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

Цей скрипт використовує ту саму команду запиту, але додатково перевіряє частину результатів "IDLE TIME", вимикаючи користувача, якщо час простою перевищує 32 ("GTR 32"). Ця фраза зустрічається двічі, оскільки маркер "IDLE TIME" може мати дві дещо різні позиції. Тоді рядок, що починається з "вибору", чекає 2 хвилини, перш ніж знову здійснити операцію, петлюючи до початку. Ви можете збільшити або зменшити значення "32" відповідно до своїх потреб.

Знайдено тут .


@eMansipater: Ви б не хотіли пояснити, що це робить, і де я можу встановити ці 24 години?
Йонас

1
Найкраще рішення - відключити швидку комутацію користувача, це призведе до вимкнення журналу, перш ніж новий користувач зможе увійти у свій обліковий запис.
Моаб

1
@Moab відключення швидкої комутації користувача означає, що не адміністратор не може увійти, якщо попередній користувач заблокував екран. @Jonas Розумне запитання - біт у дужках використовує команду запитів від support.microsoft.com/kb/186592, щоб знайти користувачів, відключених за допомогою пошуку фрази "диск", а потім виходу з них. Команда вибору чекає виконання операції лише кожні 2 хвилини. Немає потреби в цілодобовій можливості, оскільки цей скрипт повинен вийти з користувача лише тоді, коли інший користувач уже ввійшов.
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 - це година, а не хвилина.


0

Я б шукав спосіб відключити функцію "Переключити користувача". Це може допомогти.


Насправді мені подобається функція "користувач комутації": таким чином, хтось, хто веде довгий розрахунок, не блокує й інших користувачів використовувати комп'ютер.
Йонас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.