Как выключить компьютер командой?

Дистанционное выключение Windows сервера

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

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

Принцип работы удаленного отключения следующий:

  1. На компьютере или сервере создается пользователь, которому будет разрешено подключаться по rdp и завершать работу сервера.
  2. В автозагрузке этого пользователя будет скрипт для завершения работы.
  3. Пользователям, которые будут удаленно выключать сервер, дается специально подготовленный rdp клиент, который без всяких запросов будет подключаться нужным пользователем, у которого будет срабатывать скрипт на завершение работы.

Все достаточно просто, но на каждом этапе я сталкивался с проблемами, которые требовали не тривиального решения. Но обо все по порядку.

Итак, идем на север и создаем там простой bat файл следующего содержания:

shutdown /p /d p:0:0 /f

Сохраняем файл и создаем пользователя, под которым будем выключать сервер. Не забудьте добавить этому пользователю разрешение подключаться по rdp. Если вы выключаете компьютер с десктопной системой, то прав обычного пользователя достаточно. Если же вам надо погасить Windows Server, то пользователя нужно либо сделать админа, либо дать ему права на разрешение выключение сервера через локальную политику безопасности. Живет эта политика по адресу — параметры безопасности — локальные политики — назначение прав пользователей — завершение работы системы.

Вот тут я напоролся на первые неприятности. Я назвал свой скрипт shutdown.bat и очень долго не мог понять, почему он не срабатывает. При вводе команды shutdown с параметрами в консоли все отлично работало, но скрипт не запускался. Оказывается, его нельзя называть таким именем. После того, как переименовал в shut.bat, все отлично заработало. Какая-то нелепая загвоздка, но мне пришлось потратить немало времени, пока я разобрался, в чем тут дело.

Дальше заходим нашим новым пользователем, чтобы создались стандартные папки профиля и кладем скрипт автовыключения сервера ему в автозагрузку — C:\Users\shut-user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

Теперь нам нужно настроить автоматический вход пользователя по rdp, чтобы выполнить удаленное завершение работы. Причем пользователь должен заходить на сервер без запроса имени и пароля. Штатными средствами rdp клиента windows это сделать невозможно. Даже если вы сохраните параметры, то при переносе настроек на другой компьютер нужно будет снова вводить пароль. Мне это не подходило.

Я пробовал использовать старую портированную версию rdp 5.2. Это последняя версия, где пароль в зашифрованном виде можно было хранить в файле настроек. Но при переносе этого файла на другой компьютер, все равно выскакивало окно с вводом пароля. Добиться полного автоматизма не получалось.

Но решение было найдено. Существует любопытный проект Remote Desktop Plus, который является надстройкой над rdp. С помощью этой надстройки можно передать параметры в rdp через командную строку, в том числе и имя пользователя с паролем. Мне это полностью подходит. Скачиваем файлик rdp.exe либо с сайта автора проекта, либо с моего. Я скопировал на всякий случай эту очень полезную утилиту. Кладем его в папку и создаем в этой же папке rem-shut.bat файл следующего содержания:

rdp.exe /v:10.10.5.14 /u:shut-user /p:pass123 /w:640 /h:480

10.10.5.14адрес удаленного сервера
shut-userпользователь rdp от имени которого будет происходить выключение
pass123пароль пользователя
640 480параметры разрешения экрана, можно не указывать

Всего этого достаточно, чтобы выполнить дистанционное завершение работы на windows сервере. Пользователю необходимо передать 2 файла:

  • rdp.exe
  • rem-shut.bat

Важно, чтобы они лежали в одной папке. При запуске батника произойдет подключение rdp пользователя и выполнится скрипт завершения работы. Задача выполнена.

Удаленное выключение linux сервера

Здесь все оказалось значительно проще. Сразу же было найдено рабочее решение, которое позволяет без проблем удаленно выключить любой linux сервер. Задача решается стандартными средствами putty. Эту программу можно запускать из командной строки с параметрами. В качестве параметров можно указать файл с командами для выполнения, адрес сервера, пользователя и пароль.

Подготовим все необходимое. Сначала создаем простой текстовый документ shutdown.txt следующего содержания:

shutdown -h now

Дальше создаем bat файл serv-rem-shut.bat с таким содержимым:

putty.exe -m shutdown.txt -ssh -P 22 -l root -pw rootpass 10.10.5.15

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 позволяет выполнить удаленное выключение компьютеров даже через интернет.

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

Как убрать открывающуюся командную строку cmd.exe?

В любом случае, для выявления источника выскакивающей строки необходимо провести комплексную очистку и проверку настроек Windows 7/8/10. Вот что сделайте в первую очередь:

  1. Первым делом очистите систему от остаточных файлов и подправьте реестр. Для этого загрузите утилиту CCleaner. Там выполните две опции – “Очистка” и “Реестр”.

    Программа CCleaner для очистки системы

  2. Далее разгружаем автозагрузку. В CCleaner откройте пункт “Сервис” – “Автозагрузка”. Выделяйте весь сторонний софт и кликайте “Выключить”. Перезапускайте ПК и проверяйте.
  3. Обязательно загрузите два сканера на компьютер. AdwCleaner и MalwareBytes. Прогоните через них систему, постоянно подкрепляя все перезагрузкой.

    Антивирусный сканер AdwCleaner в Windows 10

  4. В случае с десяткой, дополнительно проведите команду sfc /scannow. Главное – запустите консоль от админа. Такая команда проверяет все системные файлы и ресурсы, выявляет в них ошибки и исправляет их.

    Команда восстановления файлов в Windows 10

  5. Отдельно стоит сказать про режим “Чистого запуска Windows”: в поле “Выполнить” вбейте msconfig – выберите пункт “Диагностический запуск” – перезапускайте компьютер. Если во время ЧЗ командная строка все равно появляется – то это точно системный процесс.

    Запуск режима “Чистой загрузки” Windows

Это все общие советы – так сказать полумеры, которые помогут при легких сбоях и сбитых параметрах. В противном случае, вам придется вручную все проверять.

Удаляем выскакивающий cmd.exe с помощью Планировщика

Для запуска вбейте в поисковое меню “Планировщик заданий” или пропишите в Выполнить операцию – taskschd.msc. После откроется меню ПЗ, а мы делаем следующее:

  1. Нажмите слева на строку Библиотека планировщика.
  2. По центру откроется список спланированных в Windows операций.
  3. Там могут быть как системные, так и сторонние утилиты. Для каждого софта в описании определена частотность или время запуска.

    Планировщик заданий в Windows 10

  4. Поочередно проверьте список, выделяя каждую “левую” запись. Можете сориентироваться по времени запуска.
  5. Удаляйте все сторонние задания – выделяем строку и снизу справа кликаем “Удалить”
  6. Если вы не уверены в назначении того или иного задания, то просто жмите “Отключить”, либо пробейте в поиске его назначение.
  7. Также, выделяя какое-нибудь задание, снизу, во вкладке “Действия”, вы можете отследить корневую папку приложения.

После того, как вы удалите/отключите все лишнее, командная строка должна пропасть. Подобную процедуру можно провести через стирание run файлов в реестре – вот наглядное видео.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *