Blog. Just Blog

Перезагрузка компьютера из командной строки

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Software | Автор: ManHunter
В некоторых случаях требуется перезагрузить компьютер из командной строки, пакетного файла, через удаленный доступ или в автоматическим режиме без участия человека (например, через планировщик). В этом случае привычная комбинация меню "Пуск" - "Завершение работы", естественно, недоступна. Можно, конечно, воспользоваться сторонними утилитами различных разработчиков, скриптами AutoIt и другими вспомогательными средствами, но они могут быть не всегда доступны. Здесь я собрал несколько способов перезагрузки компьютера с использованием команд самой операционной системы. Некоторые из них работают только на определенных версиях Windows, а некоторые универсальные.

Первая универсальная команда перезагрузки через shutdown, работающая на Windows XP и Windows 7. Параметры команды: -r - перезагрузка (reboot), -f - остановить все запущенные приложения, -t 0 - перезагрузить сразу же, без ожидания.

shutdown -t 0 -r -f
Вторая команда экзотичная, выполняется через команду ping. Работает также на Windows XP и Windows 7:

ping -n 0 127.0.0.1>nul&wmic OS WHERE Primary="TRUE" CALL Win32Shutdown 6
Следующие две команды специфичны только для Windows XP. Эта работает на всех версиях Windows XP:

rundll32 user.exe,ExitWindowsExec 2
А эта работает только до версии SP2 включительно. Останавливается служба журнала событий, после чего система автоматически уходит в перезагрузку. На более новых системах подобный фокус не срабатывает.

echo y|net stop eventlog
Следующий метод перезагрузки самый громоздкий и основан на использовании скрипта VBS. Скрипт состоит из нескольких строчек, поэтому его придется создавать через команды консоли copy con имя_файла.vbs или через перенаправление вывода команды echo в файл. Зато сохраненный файл можно использовать в будущем. Такой способ подходит для Windows XP и Windows 7.

set objWMIService = GetObject("winmgmts:" & "{impersonationLevel = impersonate}!\\.\root\cimv2")
set colSoftware = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
for each objSoftware in colSoftware
objSoftware.Win32Shutdown 1
next

И напоследок команда для перевода компьютера в спящий режим (hibernate). Команда работает на Windows 7 и требует прав Администратора:

rundll32.exe powrprof.dll,SetSuspendState
Надеюсь, что эта информация окажется вам полезной. Если вы знаете еще какие-нибудь интересные способы перезагрузки, то напишите в комментариях, я обязательно добавлю их в статью.

Поделиться ссылкой ВКонтакте
Просмотров: 123053 | Комментариев: 18

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
asdf (17.06.2020 в 22:26):
А если серьёзно, второй способ без пинга сработает?
ManHunter (20.07.2017 в 16:38):
Я всегда работаю под админской учеткой, даже проверить не на чем.
Андрей (20.07.2017 в 16:31):
Можно ли перезагрузить через windows + R командой shutdown не имея прав пользователя админа ?
kim (26.05.2015 в 16:53):
psshutdown -r -f -t 20 -m "До свидания ШЕУ."
Lvbnhbq (02.05.2015 в 00:19):
Спс очень помог shutdown -t 0 -r -f
dr_mom (29.11.2013 в 03:23):
Странно, на моей XP только shutdown -t 0 -r -f  сработала :(
Александр (30.05.2013 в 04:49):
Спасибо! Очень нужный материал!
Николай (15.12.2012 в 00:58):
единственный вариант получился - отключить питание...
dec (16.10.2012 в 01:47):
Сергей, спасибо.
Понадобилась перезагрузка Win98, а времени вспоминать небыло.
ManHunter (05.05.2012 в 12:42):
sc.septimus, понял, спасибо за примеры и за дополнения!
sc.septimus (04.05.2012 в 21:13):
Нифига не сам с собою. Сначала добавил до коллекции, а потом уже глянул детально твой вариант vbscript и написал замечания.
ManHunter (04.05.2012 в 11:14):
ээээ... "тихо сам с собою я веду беседу"? :)
sc.septimus (04.05.2012 в 11:13):
Несколько замечаний от любителя
1)В Вашем варианте после префикса "WinMgmts:" в моникере WMI используется такой параметр безопасности как уровень олицетворения DCOM (DCOM Impersonation Level) "WinMgmts:{impersonationLevel=Impersonate}". Проще использовать назначенные или отозванные привилегии, например, "WinMgmts:{(Shutdown, !RemoteShutdown)}" в нашем случае "WinMgmts:{(Shutdown)}"
2)Вы пытаететь работать с пространством имен по умолчанию, которое извлекается из подраздела HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace. В нашем случае таким пространством является Root\CIMV2.
Тогда вот это:
set objWMIService = GetObject("winmgmts:" & "{impersonationLevel = impersonate}!\\.\root\cimv2") можно смело сократить до вот этого:
set objWMIService = GetObject("winmgmts:"),
т.к. ваш случай больше подходит для перезагрузки удаленных станций.
Я бы понял такой вариант:
objWMIService = GetObject("winmgmts:" & "{impersonationLevel = impersonate}!\\VPUPKIN_COMP\root\cimv2". Но зачем так много писать для локального компа?
3)ObjOperatingSystem.Win32Shutdown(1) выключит машину, а не перезагрузит/ Либо параметр (2) либо ObjOperatingSystem.Reboot()
Log Off - objOperatingSystem.Win32Shutdown(0)
Forced Log Off - objOperatingSystem.Win32Shutdown(0 + 4)
Shutdown - objOperatingSystem.Win32Shutdown(1)
Forced Shutdown - objOperatingSystem.Win32Shutdown(1 + 4)
Reboot - objOperatingSystem.Win32Shutdown(2)
Forced Reboot - objOperatingSystem.Win32Shutdown(2 + 4)
Power Off - objOperatingSystem.Win32Shutdown(8)
Forced Power Off - objOperatingSystem.Win32Shutdown(8 + 4)
4)Ваш вариант на Windows 7 вместо перезагрузки выдаст лаконичное "Privilege not Held"
Этот вариант будет работать и на семерке и на XP:
set objWMIService = GetObject("winmgmts:{(Shutdown)}")
set colSoftware = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
for each objSoftware in colSoftware
objSoftware.Win32Shutdown(2)
next
sc.septimus (04.05.2012 в 09:11):
Вот еще варианты на VBS с запросом подтверждения выполнения действия
--------------------------------------------------------------
Message="Вы хотите заверить сеанс пользователя?"
YesNo = MsgBox(Message, vbYesNo)
If YesNo = vbYes Then
Set objWMIService = GetObject("winmgmts:{(Shutdown)}")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Win32Shutdown(0)
Next
End if
---------------------------------------------------------------
Message="Вы хотите выключить компьютер?"
YesNo = MsgBox(Message, vbYesNo)
If YesNo = vbYes Then
Set objWMIService = GetObject("winmgmts:{(Shutdown)}")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Win32Shutdown(1)
Next
End if
------------------------------------------------------------------
Message="Вы хотите перезагрузить компьютер?"
YesNo = MsgBox(Message, vbYesNo)
If YesNo = vbYes Then
Set objWMIService = GetObject("winmgmts:{(Shutdown)}")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Reboot()
Next
End If
Віталій (13.03.2012 в 18:36):
А как из командной строки под ХР запустить е-майл?

Win 98 было  - start mailto:test@mail.ru?subject=трялялля
Сергей (14.07.2011 в 23:42):
Спасибо, действительно нужная инфа. Вот только я пару лет назад озадачился этим же для Windows 98, хочу еще пару способов для Windows 98 указать, вдруг еще кому пригодится :) .
Перезагрузка RUNDLL32.EXE shell32.dll,SHExitWindowsEx 2
Выключение RUNDLL32.EXE shell32.dll,SHExitWindowsEx 1

И на VB script выключение
Dim objShell
set objShell = CreateObject("Shell.Application")
objShell.ShutdownWindows
set objShell = nothing

На 98й проверял, как на остальных работает, не знаю.
Isaev (04.07.2011 в 14:04):
Познавательно!
Я кроме shutdown ничего не знал :)
voila (03.07.2011 в 11:19):
Спасибо за описание, действительно может пригодиться.
Чаще всего для подобных вещей использую совершенно чудную NirCMD — http://www.nirsoft.net/utils/nircmd.html, удобнее всего ее привязать к Total Commander или подобному фм.

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

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0029 сек.) / Память: 4.5 Mb
Наверх