2014-11-05 3 views
1

어떤 이유로 든 powershell 스크립트가 실패하면 배치 스크립트를 종료하고 로그 파일에 쓸 수있는 방법이 필요합니다.배치 스크립트에서 powershell 스크립트 호출

SET DBSCRIPT=C:\Scripts\UpdateAppDB.ps1 
IF EXISTS %DBSCRIPT% (
    POWERSHELL -Command %DBSCRIPT% 
) ELSE (
    ECHO "Script not found." >> C:\TestResults\TestLog.txt` 
    EXIT 
) 

PowerShell을 실행하는 동안 발생할 수있는 오류를 처리 할 수있는 방법이 있나요 :

는 지금은이 비슷한 있나요?

+0

을 * errorlevel * 테스트 할 수 있습니까? '만약 errorlevel 1 goto BAD'. 만약 그렇지 않으면 POWERSHELL에게'CALL'을 요구할 수도 있습니다. –

+0

하지만, try> catch와 같은 일을 할 수 없다면 powershell을 수정하여 종료 코드 나 다른 것을 던질 수 있습니다. –

+0

@SeanLong 예, 스크립트는 적절한 상태 코드와 함께 종료되어야합니다. 배치에는 예외 처리가 없습니다. 외부 명령이 반환 한 것에 대해서만 반응 할 수 있습니다. –

답변

2

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 
} 
+0

여기서'ERRORLEVEL'은 PowerShell 스크립트가 수행 한 것이 아니라 PowerShell 자체가 반환 한 것을 나타낼 것이라고 생각합니다. PowerShell이 ​​시작되고 스크립트 파일을 실행하려고 시도하면 스크립트의 오류와 상관없이 'ERRORLEVEL'이 (가) '0'이됩니다. – aphoria

+0

수정하십시오. 일괄 처리는 PowerShell 스크립트 내부의 오류 처리를 대체 할 수 없습니다. 스크립트가 반환하는 것에 만 반응 할 수 있습니다. –

관련 문제