Показать полную графическую версию : [решено] Перезагрузка компьютера в безопасный режим с помощью скрипта
Привет!
Существует ли способ перезагрузить компьютер в безопасный режим с помощью CMD/BAT/VBS/скрипта? Что-то типа shutdown -r -s -t 00, где "-s" — "Safe Mode" (это лишь пример, как это могло бы выглядеть)
Kot86, в том виде, как Вы предполагаете — нет, не существует.
Единственно возможный путь — добавить в конфигурацию перечня ОС для загрузки новую строку, осуществляющую загрузку в безопасный режим, сделать её умолчальной, добавить в реестр однократный запуск команд, убирающих эту строку из конфигурации загрузки и возвращающей предыдущее умолчание, и перезагрузиться. После перезагрузки произойдёт загрузка в безопасный режим, тут же отработают команды на возвращение предыдущего поведения. Примерно так: vbscript - How do I restart a computer in safe mode with a Windows script? - Stack Overflow (http://stackoverflow.com/questions/13975779/how-do-i-restart-a-computer-in-safe-mode-with-a-windows-script).
Iska, благодарю! То, что нужно! Только запускать надо от админа, иначе идёт простой ребут.
P.S. Я так понимаю, что это :ver_nt5x
:Run Windows 2000/XP specific commands here
bootcfg /raw /a /safeboot:network /id 1
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "*UndoSB" /t REG_SZ /d "bootcfg /raw /fastdetect /id 1"
SHUTDOWN -r -f -t 05
goto end можно вырезать для Windows 7?
Kot86, я не проверял код.
В общем, сделал под все версии Windows (от Win2000 до Win10). Выглядит это так:
Echo Off
REM Check Windows Version
ver | findstr /i "5\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt5x
ver | findstr /i "5\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt5x
ver | findstr /i "5\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt5x
ver | findstr /i "6\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt6x
ver | findstr /i "6\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt6x
ver | findstr /i "6\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt6x
ver | findstr /i "6\.3\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt6x
ver | findstr /i "10\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_nt10x
goto warn_and_exit
:ver_nt5x
:Run Windows 2000/XP specific commands here
bootcfg /raw /a /safeboot:network /id 1
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "*UndoSB" /t REG_SZ /d "bootcfg /raw /fastdetect /id 1"
SHUTDOWN -r -f -t 03
goto end
:ver_nt6x
:Run Windows Vista/7/8/8.1 specific commands here
bcdedit /set {current} safeboot network
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "*UndoSB" /t REG_SZ /d "bcdedit /deletevalue {current} safeboot"
SHUTDOWN -r -f -t 03
goto end
:ver_nt10x
:Run Windows 10 specific commands here
bcdedit /set {current} safeboot network
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "*UndoSB" /t REG_SZ /d "bcdedit /deletevalue {current} safeboot"
SHUTDOWN -r -f -t 03
goto end
Echo On
:warn_and_exit
echo Machine OS cannot be determined.
:end
Запускать нужно от имени администратора.
Также можно вызывать "батник" с помощью VBS-скрипта, тогда запуск от администратора не потребуется, но нужно будет подтвердить предупреждение UAC:
Dim oShell, returnCode
Set objShell = CreateObject("Shell.Application")
Set oShell = WScript.CreateObject("WScript.Shell")
returnCode = oShell.Popup("Do you want to restart your computer in Safe Mode", 0, "Restart In Safe Mode", 4 + 48 + 256)
Select Case returnCode
case 6, -1
objShell.ShellExecute "REBOOT.bat", "", "", "runas", 0
case 7
oShell.popup "Operation Canceled", 0, "Restart In Safe Mode", 0 + 64 + 0
End Select
В данном случае эти два файла должны находиться в одной папке (например, на рабочем столе).
Чтобы была возможность запускать эти файлы из разных папок, нужно лишь в файле REBOOT.vbs указать путь до файла REBOOT.bat.
Пример: кидаем файл REBOOT.bat в корень диска D:, получается D:\REBOOT.bat
Открываем блокнотом файл REBOOT.vbs и в строке objShell.ShellExecute "REBOOT.bat", "", "", "runas", 0 меняем "REBOOT.bat" на "D:\REBOOT.bat"
Получаем objShell.ShellExecute "D:\REBOOT.bat", "", "", "runas", 0
Сохраняем, пользуемся.
P.S. Спасибо Iska за ссылку (http://stackoverflow.com/questions/13975779/how-do-i-restart-a-computer-in-safe-mode-with-a-windows-script)!
Как подкорректрировать вышеприведённый REBOOT.bat для выполнения следующей задачи ? :
Запускаем cmd (bat) файл из обычной среды Win7-10,
компьютер перезагружается в режим SafeMode,
применяется рег твик из внешнего reg файла (или из того же запускаемого cmd )
компьютер перезагружается,
и загружается обычным образом ОС, с применёнными изменениями в реестре
Единственно возможный путь — добавить в конфигурацию перечня ОС для загрузки новую строку, осуществляющую загрузку в безопасный режим, сделать её умолчальной, добавить в реестр однократный запуск команд, убирающих эту строку из конфигурации загрузки и возвращающей предыдущее умолчание, и перезагрузиться. После перезагрузки произойдёт загрузка в безопасный режим, тут же отработают команды на возвращение предыдущего поведения. »
Вот тут все написано. Вместе с отработкой команды на возврат стандартного запуска можно впихнуть этот твик.
А что такое - "*UndoSB" ?
А что такое - "*UndoSB" ? »
Насколько я понимаю — абсолютно произвольно взятое имя параметра.
Elven,
тут же отработают команды на возвращение предыдущего поведения
После запуска REBOOT.bat - SafeMode и никакой принудительной перезагрузки для возвращения в исходное состояние...
ОС - Win10Pro x64.. Запуск от имени админа. В чём может быть дело ?
и никакой принудительной перезагрузки для возвращения в исходное состояние... »
Да, там:
bcdedit /deletevalue {current} safeboot »
именно так — просто удаляется запись загрузчика в Safe Mode. А Вам, по идее, там надо прописать запуск на исполнение пакетного файла, в котором будет импорт файла реестра, затем описанное удаление записи загрузчика, затем команда на перезагрузку машины.
Iska,
Да я пока про рег твик и не думаю. Застрял в SafeMode , хотя и запись в RunOnce : bcdedit /deletevalue {current} safeboot - есть, и принудительную перезагрузку делаю.
Без результата. Всё время после перезагрузки возвращаюсь в SafeMode...
Т.е. - не отрабатывается у меня почему то в RunOnce : bcdedit /deletevalue {current} safeboot. ( Может конкретный путь к bcdedit нужно указывать ? )
Принудительно, из внешнего скрипта - bcdedit /deletevalue {current} safeboot - работает нормально...
MKN, сожалею, тут:
Т.е. - не отрабатывается у меня почему то в RunOnce : bcdedit /deletevalue {current} safeboot. ( Может конкретный путь к bcdedit нужно указывать ? )
Принудительно, из внешнего скрипта - bcdedit /deletevalue {current} safeboot - работает нормально... »
— я Вам совершенно ничего внятного не подскажу: я только-только сел за Windows 7 (и то за «временно арендованную»).
Был не внимателен...
Перед значением параметра поставьте *
http://forum.oszone.net/thread-113624.html
кто повис в safe mode, нормальная перезагрузка.
' http://windoza.ucoz.de/
If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
Set objShell2 = WScript.CreateObject("WScript.Shell")
objShell2.Run "bcdedit /deletevalue {current} safeboot",0,True
objShell2.Run "shutdown -r -t 00 -f",0,True
End If
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.