Записки IT специалиста
Админу на заметку — 17. Как выключить или перезагрузить компьютер через RDP
- Автор: Уваров А.С.
- 27.11.2015
Удаленный доступ к рабочему столу по протоколу RDP широко используется для работы не только с серверами, но и с рабочими станциями, как для удаленной работы, так и в целях администрирования. Однако есть некоторые ограничения, в частности в среде клиентской ОС нельзя управлять параметрами питания, даже имея права локального администратора. В некоторых случаях это способно взывать затруднения, поэтому если вы до сих пор не знаете, как выключить или перезагрузить клиентскую версию ОС через RDP — эта статья для вас.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
В серверных системах семейства Windows локальный администратор, не говоря о доменном, имеет полный контроль над системой и не испытывает затруднений в управлении питанием даже подключившись через удаленный доступ.

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

Несмотря на кажущуюся нелогичность, определенный смысл в таком поведении есть. Серверные ОС администрируют профессионалы (как минимум в теории), которые должны отдавать себе отчет о возможных последствиях своих действий. С другой стороны, удаленно выключив ПК так просто включить его уже не получится, в большинстве случаев потребуется физическое присутствие, поэтому решение убрать подобную функцию от простых пользователей выглядит вполне обоснованно. Администраторы, следуя этой логике, должны уметь управлять питанием и иными способами.
Но как показывает практика, умеют это не все. Ничего страшного в этом нет, как говорил мой школьный учитель: спросить — стыд минуты, не знать — стыд всей жизни.
Графическая оболочка
На самом деле «проблема» решается не просто, а очень просто. Выйдя на рабочий стол достаточно нажать Alt+F4 чтобы получить стандартный диалог завершения работы.

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

Беда в том, что этого экрана через RDP вы уже не увидите. Да и открытые приложения — это полбеды, хуже, когда систему не дает выключить или перезагрузить зависшее приложение. В этом случае придется искать иные методы.
Командная строка
Как обычно, если графические инструменты не помогают, на помощь администратору приходит командная строка. Для того, чтобы управлять питанием компьютера с ее помощью не надо обладать особыми знаниями, достаточно запомнить одну простую команду. Нажмите Win+R или Пуск — Выполнить и введите следующие команды:

Разберем ключи команды подробнее:
- s — выключение компьютера
- r — перезагрузка
- f — принудительное завершение мешающих перезагрузке процессов
- t — время, через которое завершение работы будет выполнено, указывается в секундах через пробел. Если данный параметр не используется команда будет выполнена через 60 секунд.
Утилита PsShutdown от Sysinternals
Если штатные возможности вас по какой-либо причине не устраивают, то можно воспользоваться альтернативой — утилитой PsShutdown от Sysinternals. Разместите скачанный файл в любом удобном месте, лучше всего в одном из указанных в переменной PATH, либо добавьте туда ее расположение, это позволить запускать ее по короткому имени, без указания пути. Синтаксис утилиты похож на синтаксис стандартной, но есть некоторые отличия, так для выключения выполните:
а для перезагрузки:
Поясним используемые ключи:
- k — выключение системы
- r — перезагрузка
- f — принудительное завершение процессов
- t — время выполнения команды
Если вместо ключа -k использовать для выключения ключ -s, то система завершит работу без выключения питания, старожилы должны хорошо помнить:

Кроме того, данная утилита позволяет управлять питанием других ПК по сети. Если честно, то работать по сети умеет и штатная утилита shutdown, достаточно указать ключ:
Но есть один существенный недостаток — команда выполняется в контексте запустившего его пользователя, поэтому вы из дома не сможете выключить рабочий ПК, даже имея доступ в корпоративную сеть через VPN и имея учетные данные администратора сети.
PsShutdown данного недостатка лишена и позволяет указывать учетные данные для подключения к удаленному ПК, например:
Данная команда выполнит перезагрузку удаленного ПК computer использовав для подключения имя username и пароль password. Следует помнить, что указанный вами пользователь должен иметь права доступа к административному ресурсу ADMIN$. В среде Active Directory этим правом обладает администратор домена, а вот в одноранговой сети могут возникнуть затруднения.
Если вы попробуете выключить удаленную систему даже с использованием учетных данных локального администратора, то скорее всего получите ошибку Отказано в доступе.
![]()
Это свидетельствует о том, что данный пользователь не имеет доступа к ресурсу ADMIN$. Чтобы его включить нужно выполнить два условия: включить общий доступ к файлам и принтерам
![]()
А затем в ветвь реестра
добавить параметр типа DWORD с именем
и установить его значение равным 1. После этого компьютер потребуется перезагрузить.
Попробуем снова выключить его удаленно.
![]()
Как видим в этот раз команда отработала успешно.
PowerShell
Использовать PowerShell для выключения или перезагрузки компьютера, это сродни стрельбы из пушки по воробьям, но в ряде случаев может оказаться полезным.
Для выключения используйте команду:
А для перезагрузки:
Ключ -Force в данном случае аналогичен ключу -f команды shutdown и предполагает принудительное завершение работы мешающих выключению приложений.
Также PowerShell можно использовать для управления питанием по сети, например, можно выключить удаленный ПК командой:
- ComputerName — имя удаленного компьютера, допускается перечисление нескольких имен через запятую
- Credential — имя учетной записи для аутентификации в удаленной системе
При этом работа через PowerShell более безопасна, так как пароль не вводится открытым текстом и не остается в истории команд. Для аутентификации используются стандартные механизмы ОС.
![]()
Как видим, для управления питанием в ОС Windows доступны самые разнообразные инструменты — на любой вкус и цвет. При этом все они доступны внутри терминальной сессии, какой из них использовать — дело личного вкуса и предпочтений.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Как правильно выключать сервер
Случаются ситуации, когда необходимо быстро выключить сервер. Например — поехали Вы на природу, кушаете шашлыки — звонок из офиса и голос предупреждает, что через 5 минут выключат свет. Хорошо, если настроен UPS, который самостоятельно выключит корректно сервер, а если нет?
Тогда пытаемся подключиться с телефона по терминалу. Судорожно вводим сложный пароль — 10 раз ошибаемся и в итоге не успеваем т.к. электрик решил не ждать. Вот и все :(. Сервисы выключаются неконкретно, кроме сервисов Cистемы IP телефонии конечно. Вот бы нам кнопку, которая позволяла бы выключить сервере без входа в саму систему т.е. не вводя пароль.
Для того чтобы так сделать вам нужно изменить локальную политику безопасности.
Для этого откройте:
и измените её статус на Включен. 
У меня появилась задача по организации оперативного выключения удаленных серверов в один клик. Причем выключать сервера должны разнообразные пользователи, в том числе и без знаний и понимания принципов работы сервера. То есть они должны просто нажать кнопку, чтобы сервер автоматически завершил свою работу.
Причем выключать по сети нужно как windows серверы, так и linux различных дистрибутивов — ubuntu, centos, freebsd. То есть решение должно быть простое и надежное.
Дистанционное выключение Windows сервера
Начнем с самого сложного. На практике реализовать надежный способ выключения windows машин по сети для меня оказалось сложнее, чем linux. Методов и подходов к решению данной задачи много. Я пробовал разные варианты и остановился на одном, который мне показался самым надежным, он сработал без проблем во всех случаях во время тестирования.
Обязательным условием удаленного выключения сервера является сетевой доступ к нему по rdp. Вы можете находится в локальной сети с ним, подключиться по vpn или пробросить rdp соединение редиректом со шлюза. Не важно, главное попасть в систему по rdp.
Принцип работы удаленного отключения следующий:
- На компьютере или сервере создается пользователь, которому будет разрешено подключаться по rdp и завершать работу сервера.
- В автозагрузке этого пользователя будет скрипт для завершения работы.
- Пользователям, которые будут удаленно выключать сервер, дается специально подготовленный rdp клиент, который без всяких запросов будет подключаться нужным пользователем, у которого будет срабатывать скрипт на завершение работы.
Все достаточно просто, но на каждом этапе я сталкивался с проблемами, которые требовали не тривиального решения. Но обо все по порядку.
Итак, идем на север и создаем там простой bat файл следующего содержания:
Сохраняем файл и создаем пользователя, под которым будем выключать сервер. Не забудьте добавить этому пользователю разрешение подключаться по rdp. Если вы выключаете компьютер с десктопной системой, то прав обычного пользователя достаточно. Если же вам надо погасить Windows Server, то пользователя нужно либо сделать админа, либо дать ему права на разрешение выключение сервера через локальную политику безопасности. Живет эта политика по адресу — параметры безопасности — локальные политики — назначение прав пользователей — завершение работы системы.
Вот тут я напоролся на первые неприятности. Я назвал свой скрипт shutdown.bat и очень долго не мог понять, почему он не срабатывает. При вводе команды shutdown с параметрами в консоли все отлично работало, но скрипт не запускался. Оказывается, его нельзя называть таким именем. После того, как переименовал в shut.bat, все отлично заработало. Какая-то нелепая загвоздка, но мне пришлось потратить немало времени, пока я разобрался, в чем тут дело.
Дальше заходим нашим новым пользователем, чтобы создались стандартные папки профиля и кладем скрипт автовыключения сервера ему в автозагрузку — C:Usersshut-userAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup.
Теперь нам нужно настроить автоматический вход пользователя по rdp, чтобы выполнить удаленное завершение работы. Причем пользователь должен заходить на сервер без запроса имени и пароля. Штатными средствами rdp клиента windows это сделать невозможно. Даже если вы сохраните параметры, то при переносе настроек на другой компьютер нужно будет снова вводить пароль. Мне это не подходило.
Я пробовал использовать старую портированную версию rdp 5.2. Это последняя версия, где пароль в зашифрованном виде можно было хранить в файле настроек. Но при переносе этого файла на другой компьютер, все равно выскакивало окно с вводом пароля. Добиться полного автоматизма не получалось.
Но решение было найдено. Существует любопытный проект Remote Desktop Plus, который является надстройкой над rdp. С помощью этой надстройки можно передать параметры в rdp через командную строку, в том числе и имя пользователя с паролем. Мне это полностью подходит. Скачиваем файлик rdp.exe либо с сайта автора проекта, либо с моего. Я скопировал на всякий случай эту очень полезную утилиту. Кладем его в папку и создаем в этой же папке rem-shut.bat файл следующего содержания:
| 10.10.5.14 | адрес удаленного сервера |
| shut-user | пользователь rdp от имени которого будет происходить выключение |
| pass123 | пароль пользователя |
| 640 480 | параметры разрешения экрана, можно не указывать |
Всего этого достаточно, чтобы выполнить дистанционное завершение работы на windows сервере. Пользователю необходимо передать 2 файла:
- rdp.exe
- rem-shut.bat
Важно, чтобы они лежали в одной папке. При запуске батника произойдет подключение rdp пользователя и выполнится скрипт завершения работы. Задача выполнена.
Удаленное выключение linux сервера
Здесь все оказалось значительно проще. Сразу же было найдено рабочее решение, которое позволяет без проблем удаленно выключить любой linux сервер. Задача решается стандартными средствами putty. Эту программу можно запускать из командной строки с параметрами. В качестве параметров можно указать файл с командами для выполнения, адрес сервера, пользователя и пароль.
Подготовим все необходимое. Сначала создаем простой текстовый документ shutdown.txt следующего содержания:
Дальше создаем bat файл serv-rem-shut.bat с таким содержимым:
| shutdown.txt | текстовый файл с командой на отключение |
| 22 | номер порта ssh |
| root | имя пользователя, от которого будет выполняться команда на удаленное выключение, лучше создать отдельного |
| rootpass | пароль этого пользователя |
| 10.10.5.15 | адрес linux сервера |
Передаем пользователю 3 файла, сложенные в одну папку:
- putty.exe
- shutdown.txt
- serv-rem-shut.bat
Теперь при запуске скрипта serv-rem-shut.bat серверу по сети будет отправлена консольная команда на завершение работы. При этом не будет задано никаких вопросов. Сервер просто молча выключится.
Заключение
Вот такие нехитрые способы были мной придуманы и реализованы. Тут еще важно обеспечить доступ к локальной сети, в которой живут серверы. В моем случае openvpn позволяет выполнить удаленное выключение компьютеров даже через интернет.
Уверен, существует множество других возможностей погасить сервер удаленно. Буду рад, если в комментариях со мной кто-нибудь поделится своими идеями и опытом на этот счет.
Выключение компьютера — действие, с которым обычные пользователи сталкиваются чуть ли не каждый день. Если выключать сервер приходится довольно редко, то обычные, десктопные компьютеры подвержены этой операции очень даже часто. Большинство пользователей выключают linux в графическом интерфейсе системы. В окружении рабочего стола KDE это делается через главное меню, а в Gnome и Unity даже есть специальная кнопка на панели для решения этой задачи.
Но не всегда есть возможность выключить компьютер linux таким образом. Например, если окружение рабочего стола не работает, то больше ничего не остается, кроме того, чтобы выполнять выключение компьютера из командной строки. К тому же выключение компьютера linux через терминал единственно возможный способ для серверов, где нет графического интерфейса. Как вы увидите, этот способ также намного гибче обычного выключения, поскольку вы можете настроить нужное время отключения, или же выключить компьютер, дождавшись завершения работы определенной программы.
Чтобы выключить компьютер Linux используется команда shutdown. Есть также команды poweroff, halt, но они для нестандартных случаев. Обычно же хватает одной только shutdown. Также выключить linux из консоли можно с помощью сочетаний клавиш SysRq. Но сначала давайте рассмотрим синтаксис команды shutdown.
Синтаксис shutdown
Синтаксис команды очень простой:
$ shutdown [опции] [время] [сообщение]
Опции задают параметры отключения, их мы рассмотрим ниже. Время можно задавать в формате чч:мм в 24 часовом формате. Также можно использовать запись +минуты, указывающую через сколько минут от текущего момента нужно выключить компьютер linux. Также доступна константа now, указывающая, что выключать нужно прямо сейчас.
Параметр сообщение позволяет задать сообщение, которое будет выведено в терминал перед выключением.
Опции
- —help — вывести справку по программе
- -H, —halt — отключить питание, не завершая процессы и не перемонтируя файловые системы
- -P, —poweroff — нормальное выключение
- -r, —reboot — перезагрузка
- -k — не выполнять реальных действий, а только вывести сообщение
- —no-wall — выключить компьютер, но не выводить сообщение
- -c — отменить запланированное выключение linux из командной строки
Вот в принципе и все опции утилиты, их больше чем достаточно для такого простого действия. Теперь можно переходить к примерам, но сначала давайте рассмотрим, что же происходит во время включения Linux.
Процесс выключения Linux
Естественно, команда shutdown linux или любая другая не самостоятельно завершает работу системы и выключает компьютер. Она всего лишь передает запрос на выключение системе инициализации, а затем ядру. А уже они выполняют ряд сложных операций по подготовке и выключению компьютера. Если кратко, то вот они:
- Завершение процессов пользователя
- Сигнал SIGTERM всем процессам
- Сигнал SIGKILL всем процессам
- Монтирование файловых систем в режиме только для чтения
- Подготовка внешних устройств к отключению
- Блокировка пространства пользователя, чтобы гарантировать, что ни один код пользователя больше не будет запущен
- Завершение работы и отключение питания большинства периферических устройств
- Отключение питания компьютера
Теперь вы понимаете суть процесса выключения и то почему нельзя просто выдернуть шнур питания с розетки. Если это сделать, компьютер отключится моментально и не выполнит всех необходимых операций, а это может грозить потерей не сохраненных или даже недавно сохраненных данных, повреждением файловой системы и т д. Поэтому желательно выключать компьютер правильно с помощью shutdown или других специальных утилит.
А теперь перейдем к примерам.
Выключение компьютера в Linux
1. shutdown
Самая простая и самая часто используемая команда выключения компьютера linux, отключит компьютер немедленно:
sudo shutdown -h now
Как видите, используется обычное выключение, и константа времени now, тоесть сейчас.
Теперь попробуем запланировать выключение компьютера linux через пять минут:
sudo shutdown -h +5 "Компьютер будет выключен через 5 минут"
Мы запланировали вывод сообщения перед выключением.
Теперь давайте отменим выключение компьютера Linux:
sudo shutdown -c
Точно так же мы можем указать точное время выключения, например в девять вечера:
sudo shutdown -h 21:00
Как я уже говорил, не только команда shutdown linux умеет выключать компьютер, есть еще несколько утилит способных на это. Рассмотрим их тоже.
2. reboot
Команда reboot обычно используется для перезагрузки системы, но она также умеет выключать компьютер. Мы не будем ее подробно рассматривать, потому, что она еще проще команды shutdown. Для выключения нужно задать опцию -p:
3. halt
Эта команда тоже выключает компьютер. Только делает она это очень по-своему. Она не выполняет никаких подготовительных действий перед выключением, а просто отключает питание:
Использование halt может повредить систему
4. poweroff
Это аналог halt, делает в точности то же самое:
5. SysRq
Помните, в начале статьи, я говорил о сочетании клавиш для включения компьютера? Рассмотрим этот вопрос подробнее.
SysRq — это подсистема, реализованная на уровне ядра. Ядро обрабатывает все нажатия клавиш, а с помощью этой подсистемы, оно может принимать от пользователя команды, даже когда система полностью зависла. Основное предназначение этой подсистемы — работа с компьютером в проблемных ситуациях, например, если вы думаете что ваш компьютер заразил вирус, или компьютер завис и его нужно выключить. Для доступа к SysRq используются сочетания клавиш Alt+PrtScr+номер
Самое интересное, что мы можем выполнить безопасное выключение компьютера linux. Для этого зажмите клавиши Alt + PrtScr и поочередно нажимайте:
- R — разблокировать клавиатуру
- E — послать всем процессам сигнал SIGTERM
- I — послать всем процессам сигнал SIGKILL
- S — перенести все данные из кеша файловых систем на диск
- U — перемонтировать файловые системы только для чтения
- B — перезагрузить
Также вместо всего этого можно воспользоваться сочетанием клавиш Alt+PrtScr+O, в таком случае, вся процедура будет выполнена автоматически, эта команда поддерживается не всеми ядрами.
Выводы
Теперь вы знаете все что нужно, о том, как выключить Linux через терминал. Если вас застигнет врасплох ошибка или зависание компьютера, вы знаете что делать. Если остались вопросы — пишите в комментариях!
Как выключить Windows Server без залогинивания
Случаются ситуации, когда необходимо быстро выключить сервер. Например — поехали Вы на природу, кушаете шашлыки — звонок из офиса и голос предупреждает, что через 5 минут выключат свет. Хорошо, если настроен UPS, который самостоятельно выключит корректно сервер, а если нет?
Тогда пытаемся подключиться с телефона по терминалу. Судорожно вводим сложный пароль — 10 раз ошибаемся и в итоге не успеваем т.к. электрик решил не ждать. Вот и все :(. Сервисы выключаются неконкретно, кроме сервисов Cистемы IP телефонии конечно. Вот бы нам кнопку, которая позволяла бы выключить сервере без входа в саму систему т.е. не вводя пароль.
Для того чтобы так сделать вам нужно изменить локальную политику безопасности.
Для этого откройте:
и измените её статус на Включен. 
SHUTDOWN — описание команды и примеры использования

SHUTDOWN — Позволяет выключать или перезагружать локальный или удаленный компьютер (по сети). Использование без параметров команды shutdown приведет к выходу из системы текущего пользователя.
Синтаксис
Параметры
| Параметр | Описание |
|---|---|
| -l | Осуществляет выход текущего пользователя из системы (также используется по умолчанию, если команда запущена без параметров) |
| -s | Выключает локальный компьютер |
| -r | Выполняет перезагрузку компьютера (вместо выключения питания) |
| -a | Прерывает выключение (если оно было сделано с таймером), при использовании этого параметра, игнорируются любые другие параметры, кроме -l и -m \\имя_компьютера |
| -f | Принудительно закрывает выполняющиеся приложения |
| -m [\\имя_компьютера] | Указывает имя компьютера, который требуется выключить (или его IP адрес) |
| -t n | Устанавливает таймер завершения работы системы на n секунд. Если данный параметр не задан, то значение по умолчанию — 20 секунд. |
| -c «текст сообщения» | Задает сообщение, выводящееся в области «Сообщение» в окне «Завершение работы системы». Можно использовать до 127 знаков. Текст сообщения должен быть заключен в прямые кавычки. |
| -d [u][p]:xx:yy | Отображает перечень кодов причины выключения. В следующей таблице перечислены различные значения. |
| Значение | Описание |
|---|---|
| u | Указывает код пользователя |
| p | Указывает код планового выключения |
| xx | Указывает основной код причины (значение должно быть в диапазоне 0-255) |
| yy | Указывает вспомогательный код причины (значение должно быть в диапазоне 0-65536) |
Примеры
Перезагружаем компьютер с именем \\Server_Name через 60 секунд, принудительно закрываем все выполняющиеся программы, указываем код пользователя, указываем что выключение является плановым и заносим в системный журнал основной код причины 125 и вспомогательный код причины 1.
Справочная информация

Была ли эта статья Вам полезна?
Комментарии к статье (3)
-
- Макс
- 21.07.2022 16:53
[-m [\\имя_компьютера]]
а если компов более сотни? можно как-то по списку айпишников или имени компов отработать?- Ответить
-
- Recluse
- 21.07.2022 17:01
Я думаю, лучше вам стоит посмотреть на утилиту psshutdown, которая как раз умеет работать со списками.
- Ответить
- Аноним
- 12.10.2022 17:47
Посмотрите в сторону psexec (из комплекта Sysinternals от Марка Руссиновича), она умеет отрабатывать по текстовому файлу со списком хостов. И не только выключать, а вообще любую команду выполнять, которую в командной строке можно выполнить.