PowerShell 명령은 오류가 발생하면 종료 코드> 0으로 반환해야합니다. 이 같은 것을 처리 할 수
set "DBSCRIPT=C:\Scripts\UpdateAppDB.ps1"
if exists %DBSCRIPT% (
powershell -Command %DBSCRIPT% || ( rem Error handling routines here )
) else (
echo "Script not found." >> C:\TestResults\TestLog.txt
exit
)
또는 같은
는 (확장 가능 지연 필요) : 보조 노트로
setlocal EnableDelayedExpansion
set "DBSCRIPT=C:\Scripts\UpdateAppDB.ps1"
if exists %DBSCRIPT% (
powershell -Command %DBSCRIPT%
if !errorlevel! neq 0 ( rem Error handling routines here )
) else (
echo "Script not found." >> C:\TestResults\TestLog.txt
exit
)
: 당신이 PowerShell 스크립트를 실행하려는 때문에 내가 powershell -File "%DBSCRIPT%"
을 대신 사용하십시오 powershell -Command "%DBSCRIPT%"
입니다. 변수 주위의 큰 따옴표는 경로의 잠재적 공간을 처리합니다.
편집 : 위의 코드는 PowerShell 실행 파일 또는 PowerShell 스크립트의 0이 아닌 반환 코드 만 처리합니다. PowerShell 스크립트 내부의 오류 처리를 대체하지는 못합니다. 당신이 PowerShell 스크립트는 모든 오류를 종료하려면 (0이 아닌 종료 코드와 오류 상태를 표시) 경우에 당신은 PowerShell 스크립트에서이 같은 적어도 뭔가해야 :합니까 POWERSHELL가 설정
$ErrorActionPreference = "Stop"
try {
# ...
# rest of your code here
# ...
} catch {
Write-Error $_
exit 1
}
을 * errorlevel * 테스트 할 수 있습니까? '만약 errorlevel 1 goto BAD'. 만약 그렇지 않으면 POWERSHELL에게'CALL'을 요구할 수도 있습니다. –
하지만, try> catch와 같은 일을 할 수 없다면 powershell을 수정하여 종료 코드 나 다른 것을 던질 수 있습니다. –
@SeanLong 예, 스크립트는 적절한 상태 코드와 함께 종료되어야합니다. 배치에는 예외 처리가 없습니다. 외부 명령이 반환 한 것에 대해서만 반응 할 수 있습니다. –