Скрипт для перезагрузки компьютера

Скрипт shut_reboot.cmd может использоваться для перезагрузки или выключения компьютера по расписанию или вручную. Например, пользователи, подключенные к серверу по RDP не могут перезагрузить сервер, а иногда это нужно. Данный скрипт позволит перезагрузить сервер, не давая пользователю прав администратора. Правда, он содержит админский пароль в открытом виде, поэтому считаем, что наши пользователи не догадаются его подсмотреть.

Предположим, на компьютере имеется пользователь "Администратор" с очень сложным паролем "123". Эти значения указываются после ключей -u (имя пользователя) и -p (пароль).

Скрипт может перезагрузить или выключить компьютер, в зависимости от параметра, передаваемого при запуске.

Для перезагрузки используется вызов вида: shut_reboot.cmd reboot

Для выключения используется вызов вида: shut_reboot.cmd shutdown

@ECHO OFF
REM Перезагрузка и выключение сервера
SETLOCAL
IF "%1" == "" GOTO MISSING_PARAMETERS
IF %1 == reboot GOTO REBOOT
IF %1 == shutdown GOTO SHUTDOWN
GOTO MISSING_PARAMETERS
:REBOOT
ECHO Server reboot at %DATE% %TIME% >> %~dp0\reboot.log
%~dp0\..\SysinternalsSuite\PsExec.exe -u Администратор -p 123 SHUTDOWN /R /F /T 10
GOTO END
:SHUTDOWN
ECHO Server reboot at %DATE% %TIME% >> %~dp0\reboot.log
%~dp0\..\SysinternalsSuite\PsExec.exe -u Администратор -p 123 SHUTDOWN /S /F /T 10
GOTO END
:MISSING_PARAMETERS
ECHO Для корректной работы скрипту должен быть передан параметр!
ECHO Значения: reboot - перезагрузка компьютера; shutdown - выключение компьютера
ECHO .
PAUSE
GOTO END
:END

В скрипте используется утилита PsExec из пакета SysinternalsSuite. Скачать пакет можно на официальном сайте: https://technet.microsoft.com/ru-ru/sysinternals/bb842062

Структура каталогов, в которой всё это работает:

  • D:\program\cmd\shut_reboot.cmd
  • D:\program\SysinternalsSuite\PsExec.exe

Поэтому для запуска PsExec и используется конструкция %~dp0\..\SysinternalsSuite\PsExec.exe

  • %~dp0 - разворачивается в полный путь к каталогу, из которого запущен скрипт. Поэтому, вообще говоря, он не обязательно должен находиться на диске D: и в каталоге program\cmd.
  • \.. - обозначает переход из текущего каталога в каталог уровнем выше (из D:\program\cmd в D:\program)
  • \SysinternalsSuite\PsExec.exe - а это уже запуск PsExec.exe из правильного каталога.

Использование конструкции %~dp0 позволяет не привязываться к расположению скрипта в каком-то определённом каталоге. Он может быть хоть в C:\programs\cmd, хоть в D:\program\cmd, хоть где-то ещё.

ВАЖНО! Для корректной работы скрипта текст должен быть в кодировке OEM866, иначе при запуске из командной строки интепретатор не поймёт русские символы. Для примера приложен файл shut_reboot.txt, если его переименовать в shut_reboot.cmd, то это будет практически готовый скрипт, только имя и пароль в него нужно вписать свои.