1

Я пытаюсь настроить скрипт автоматического развертывания из образа Windows. Во время тестирования я сталкиваюсь с проблемой, касающейся части, которая пытается перехватить, если что-то пошло не так с определенными командами.

Вместо остановки сценария сценарий продолжает думать, что он успешен, и просто продолжает переходить к следующей команде, даже если предыдущая команда обнаружила ошибку.

Я попытался добавить else к разделам, чтобы увидеть, что пошло не так, и я заметил, что уровень ошибки был равен 0 после выполнения команды. Если только эхо не устанавливает уровень ошибки. Вот соответствующий раздел кода.

Изменить: я выделил основную причину для этого раздела кода. Я также избавился от шага imagex, чтобы уменьшить сложность и переменные.

@echo off
setlocal

set /p i_understand="Begin failure test? (Y/N) "

 if "%i_understand%"=="Y" (
 rem Deliberately causing diskpart to fail by using a nonexistent file.
 diskpart /s doesnotexist.txt
 if %ERRORLEVEL% NEQ 0 (
    echo Diskpart failed and caught.
    endlocal
    exit /b 1 )

 echo Diskpart failed but not caught. Error level is %ERRORLEVEL%
 ) else (
 echo Variable i_understand is %i_understand%
 echo Aborting. )

Если я уменьшу код до приведенного ниже, уровень ошибки будет установлен правильно:

@echo off
setlocal
rem Deliberately causing diskpart to fail by using a nonexistent file.
diskpart /s doesnotexist.txt
if %ERRORLEVEL% NEQ 0 (
    echo Diskpart failed and caught.
    endlocal
    exit /b 1 )

Идея состояла в том, чтобы отобразить предупреждения, а затем получить окончательный ответ с большой буквы "Y" для «Да, я знаю, что этот сценарий опасен, и я знаю, что я делаю». прежде чем приступить к любому другому вводу, интерпретируемому как отказ по безопасности.

Конечно, многие вещи могут пойти не так во время процесса. Возможно, подключение к сетевому диску оборвано, что-то делает целевой диск недоступным или что-то еще непредвиденное приводит к сбою одной из команд. В этом случае скрипт останавливает все, что он делает, и оставляет журнал вывода консоли до этого момента.

Естественно, во время моих тестов я столкнулся с кучей сбоев из-за неверно настроенных переменных, но скрипт продолжал работать, как будто ничего не происходило.

0