Статья описывает, как выключить или перезагрузить компьютер на Windows из командной строки: PowerShell, JScript/VBScript с WSH, nhss, shutdown. А также дополнительно, как сделать выключение или перезагрузку с задержкой.
Выключить или перезагрузить компьютер из PowerShell
Выключить компьютер можно командной Stop-Computer из консоли PowerShell:
PS C:\> Stop-Computer
Перезагрузить компьютер можно командой Restart-Computer из консоли PowerShell:
PS C:\> Restart-Computer
Как это выглядит в консоли PowerShell:
Поскольку PowerShell сейчас устанавливается на Windows по умолчанию, то использование PS команды не требует дополнительных установок.
Чтобы выполнить выключение или перезагрузку через PowerShell из bat файла или из командной строки, их надо вызывать через powershell.
Например, команда перезагрузки локального компьютера в bat файле или командной строке:
powershell "restart-computer"
Аналогично, команда выключения локального компьютера в bat файле или командной строке:
powershell "stop-computer"
Выключить или перезагрузить компьютер из JScript/VBScript через WSH
Способ основан на использовании метода Win32Shutdown класса Win32_OperatingSystem:
Выключить компьютер можно следующим скриптом на JScript:
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\\\.\\root \\cimv2"); var col_os = wmi.ExecQuery("Select * from Win32_OperatingSystem"); for(var i = new Enumerator(col_os); !i.atEnd(); i.moveNext()) i.item().Win32Shutdown(1);
Перезагрузить компьютер можно следующим скриптом на JScript:
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\\\.\\root\\cimv2"); var col_os = wmi.ExecQuery("Select * from Win32_OperatingSystem"); for(var i = new Enumerator(col_os); !i.atEnd(); i.moveNext()) i.item().Win32Shutdown(2);
Пример на VBScript, с forced restart (добавляется 4):
Dim WMIServiceObject, ComputerObject AsObject WMIServiceObject = GetObject( "Winmgmts:{impersonationLevel=impersonate,(Debug,Shutdown)}") ForEach ComputerObject In WMIServiceObject.InstancesOf("Win32_OperatingSystem") ComputerObject.Win32Shutdown(2 + 4, 0)
Поскольку WSH сейчас установлен по умолчанию на Windows, то использование JScript/VBScript не требует установки каких-либо программных компонентов.
Выключить или перезагрузить компьютер программой nhss
Программа nhss предназначена для управления питанием компьютера и позволяет выполнять такие команды, как выключение, перезагрузка, ждущий режим, спящий режим.
Выключить компьютер можно следующей командой:
nhss -sd
Перезагрузить компьютер можно следующей командой:
nhss -r
Команды просты в использовании, но потребуется установить программу nhss.exe и прописать путь к ней.
Выключить или перезагрузить компьютер командой shutdown
Выключить компьютер можно следующей командой:
shutdown
Перезагрузить компьютер можно следующей командой:
shutdown -r
Важно! Команда shutdown делает «грубое» завершение Windows, которое на практике приводило к тому, что не сохранялись настройки, сделанных в Windows в текущем сеансе. Поэтому хотя и выключение/перезагрузка компьютера через shutdown действительно срабатывает, я бы не рекомендовал использование shutdown для обычного завершения, а только для экстренных случаев, когда требуется максимально быстро завершить Windows, например, в случае Low Battery на ИБП.
Как выключить компьютер по таймеру
Чтобы настроить выключение компьютера через определенное время, например, через 1 час, это можно сделать выполнением команды выключения с задержкой, см. Сделать задержку в командном файле:
ping 127.0.0.1 -n 3600 > nul && nhss -sd
Или через PowerShell с задержкой в 30 минут:
ping 127.0.0.1 -n 1800 > nul && powershell "stop-computer"
echo off
chcp 1251
cls
:x
cls
set /p any="Завершение работы- 1, перезагрузка- 2, отключение таймера- 0. Выберите действие: "
cls
set j=%any%
if %j% == 3 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 4 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 5 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 5 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 6 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 7 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 8 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 9 (
msg * Такого значения не существует!!!
echo Такого значения не существует!!!
ping -n 2 127.0.0.1 > NUL
cls
goto x
) else (
cls
)
if %j% == 0 (
shutdown /a
msg * Таймер был отключён!
cls
exit
) else (
cls
)
if %any% == 1 (
echo Вы выбрали- завершение работы
ping -n 2 127.0.0.1 > NUL
cls
) else (
echo Вы выбрали- перезагрузку
ping -n 2 127.0.0.1 > NUL
cls
)
if %any% == 1 (
set /p sec="Введите время до завершения работы (в минутах): "
) else (
set /p sec="Введите время до перезагрузки (в минутах): "
)
set /a min=%sec%*60
cls
if %any% == 1 (
shutdown /s /t %min%
msg * Компьютер выключится через %sec% минут!
) else (
shutdown /r /t %min%
msg * Компьютер перезагрузится через %sec% минут!
)
Кодировка ANSI
Вот довольно простой и функцианальный батник
Если значение не будет выбрано, можно ли таймер поставить на автоматический выбор значения?