5

Есть ли способ заставить другого пользователя выйти из системы через командную строку в Windows 7 Home Premium?

Моя рабочая политика VPN требует, чтобы в систему входил только 1 пользователь, чтобы отключить других пользователей, я должен запустить командную строку от имени администратора, запустить диспетчер задач, а затем щелкнуть правой кнопкой мыши и выйти из системы. Это немного раздражает. В идеале я хотел бы, чтобы исполняемый или пакетный скрипт запускался, чтобы все это делалось за один быстрый шаг. Я сталкивался с несколькими потоками, в которых говорилось о выходе пользователей из системы по истечении заданного времени ожидания, и это тоже может работать нормально (при условии, что есть какие-то работающие ... мои выводы таковы, что нет) - но я все равно хотел знать, как сделать это за один шаг, если это возможно.

Есть ли способ сделать то, что я прошу?

Я не против написания приложений .net, если мне это нужно.

4 ответа4

4

Вы можете автоматизировать команду logoff, используя что-то вроде этого командного файла (адаптировано здесь):

@echo off
query session > c:\temp\session.txt
for /f "skip=2 tokens=2,3,4" %%i in (c:\temp\session.txt) DO if not "%%i"=="Geoff" logoff %%j
del c:\temp\session.txt
pause

При этом используется команда запроса сеанса для получения списка сеансов, затем команда for для анализа выходных данных и, наконец, команда logoff для выхода из системы других пользователей. Вы захотите запустить команду query session чтобы проверить вывод на вашем компьютере.

На моей машине я получаю:

C:\Users\Geoff\Desktop>query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           Geoff                     1  Active

первые две строки - мусор, поэтому часть skip 2 игнорирует их. Имя пользователя, ID и State помещаются в переменные i, j и k соответственно. Вы захотите протестировать его, и если он не будет работать как пользователь без прав администратора, вы можете либо щелкнуть правой кнопкой мыши файл на рабочем столе и выбрать «Запуск от имени администратора», либо создать ярлык для командного файла. , затем выберите Свойства | Ярлык | Расширенный | Запустить от имени администратора. В любом случае вы получите приглашение UAC. Наконец, если вы хотите запустить пакетный файл без приглашения UAC, вы можете пойти по более неясному маршруту планировщика задач: см. Этот пост.

2

Проверьте PSShutdown от MS. Вы можете использовать его с параметром -o для выхода из системы пользователя консоли и создания командного файла, который вы можете запустить одним щелчком мыши (или одним щелчком правой кнопкой мыши> запустить от имени администратора).

PsShutdown - это утилита командной строки, похожая на утилиту выключения из Windows 2000 Resource Kit, но с возможностью делать гораздо больше. В дополнение к поддержке тех же параметров для выключения или перезагрузки локального или удаленного компьютера, PsShutdown может выйти из системы пользователя консоли или заблокировать консоль (для блокировки требуется Windows 2000 или выше).

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

1

Вот интересная статья от The Scripting Guys, описывающая принудительный выход из системы, вызванный событием:

http://blogs.technet.com/b/heyscriptingguy/archive/2010/06/10/hey-scripting-guy-how-can-i-log-out-a-user-if-they-launch-a- частности, application.aspx

Предположим, вы можете использовать вход в систему или запуск explorer.exe пользователем A в качестве события триггера для выхода из системы пользователя B.

1

В качестве альтернативы моему другому ответу (этот вопрос заставил меня задуматься!), Вы также можете рассмотреть возможность использования комбинации двух вещей:

  1. Настройте запланированное задание на каждой рабочей станции для запуска сценария выхода из системы. Триггером будет конкретная запись в журнале событий.
  2. Используйте скрипт .vbs на своем рабочем столе, чтобы опубликовать запись триггера в журнале событий.

Принимая это в свою очередь:

Запланированная задача

Я думаю, вам нужно будет войти в систему под именем каждого пользователя и добавить новую задачу с пользовательским триггером: Триггеры | Новый | «На мероприятии» | Custom | Новый фильтр событий | XML | «Редактировать вручную». Затем используйте что-то вроде следующего для XML:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[(Level=4 or Level=0) and (EventID=4)]] and *[EventData[Data[1]='EVERYBODY_OFF']]</Select>
  </Query>
</QueryList>

При этом будут выполняться поиск информационных событий в журнале приложений с EventID 4 (информация) и телом данных EVERYBODY_OFF. Вы можете прочитать больше о событиях здесь.

Действие должно быть таким же простым, как shutdown -l , что должно вызвать выход из системы (вы захотите проверить его).

Сценарий запуска

Следующий скрипт .vbs будет регистрировать событие EVERYBODY_OFF по требованию:

const EVENTLOG_INFORMATION = 4
strMessage = "EVERYBODY_OFF"
set objShell = CreateObject("WScript.Shell")
objShell.LogEvent EVENTLOG_INFORMATION, strMessage

Материал для тестирования

Биты, в которых я не уверен, и которые потребуют немного тестирования:

  • Это сообщение о событии, которое публикуется на компьютере? Т.е. все ли пользователи увидят задачу?
  • Будет ли команда выключения работать правильно в контексте целевого пользователя?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .