Правильный код выхода RunSynchronousCommand для сбоя автоматической установки?

Я использую файл autounattend.xml для автоматической установки Windows Server 2022.

вspecializeУ меня есть несколько сценариев Powershell, которые я хочу запустить (определенных вRunSynchronousCommandэлементы).

Мне нужно убедиться, что в случае сбоя одного из этих сценариев весь процесс установки будет немедленно прерван. Я ожидал, что неперехваченное исключение сделает именно это, но, к моему большому удивлению, этого не произошло. Он просто проходит следующий шаг.

Как я могу гарантировать, что установка Windows будет прерываться при сбое моего пользовательского сценария? Я должен выйти с каким-то специальным кодом?

1 ответ

Per если вы используете и код возврата не0-2затем « Команда не выполнена. Должна быть возвращена ошибка и установка прервана » .

Видимо, это работает с обоими"specialize" и "auditUser«. Если это определено и настроено правильно, это должно прервать установку, как указано в этой опции.

Если значениеWillRebootявляетсяOnRequest, синхронная команда должна вернуть один из следующих кодов.

  • Код возврата:
  • Описание: Команда выполнена успешно. Перезагрузка не требуется.

  • Код возврата:
  • Описание: Команда выполнена успешно. Требуется немедленная перезагрузка. Затем можно запустить следующую команду.

  • Код возврата: 2
  • Описание: Команда все еще выполняется. Требуется немедленная перезагрузка. Затем ту же команду необходимо перезапустить. Этот код можно возвращать несколько раз.

  • Код возврата: <anything else>
  • Описание: Команда не выполнена. Должна быть возвращена ошибка и установка прервана.

Другая полезная деталь

Я бы еще добавил, что команда внутриPathэлемент, который вызываетpowershell.exe scriptfile.ps1может в конечном итоге абстрагироваться от кодов выхода из файла сценария. В моем случае, хотя сценарий заканчивается выходом10, Концовка%errorlevel%ценность все еще была1, как в «Powershell не вышел с0". Чтобы обойти эту проблему, я изменил команду на'powershell -command "& ./scriptfile.ps1;exit $LASTEXITCODE;"'. – Crono

Исключения

Более того, для перехвата необработанных исключений (или их запуска) в большинстве случаев я считаю, что Например$e=try{<logic>}Catch{$False}; If(!$e){$FreakOut=$True}или какой-либо вариант как таковой, помогающий запустить его, если в процессе выполнения не происходит иного.

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

Вспомогательные ресурсы

Другие вопросы по тегам