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