2014-02-07 2 views
2

난`파워 쉘에서 다음과 같이 스크립트를 사용하여 분기 작업을 자동화하려고 :파워 쉘에서 SVN을 호출의 결과를 확인하는 방법

$fromUrl = 'svn://some/from/url' 
$toUrl = 'svn://some/to/url.' 

[Array]$arguments = "copy", "-q", $fromUrl, $toUrl, "-m", "New branch" 

echo "Branching from: " $fromUrl 
echo "Branching to: " $toUrl 

$copyResult = & svn $arguments 
echo "Result: " $copyResult 

echo "Switching to: " $toUrl 
$switchResult = svn switch -q $toUrl ho-til-test 
echo "Result: " $switchResult 

을만큼 SVN에 대한 호출이 작동하기 때문에하는 것은, 이것이 잘 작동합니다 ; 그러나 내가 원하는 것은 결과를 캡처하고 호출이 실패하면 오류 메시지로 스크립트를 중지하는 것입니다. 위의 스크립트는 잘못된 URL로 인해 분명히 실패하지만 결과는 $copyResult$switchResult으로 캡처되지 않습니다. 결과 출력은 대신 다음과 같습니다. 상태 - 메시지 내 두 개의 결과 변수의 출력 전에 표시됩니다, 그들은 비어 :

PS > .\PsExampleForSO.ps1 
Branching from: 
svn://some/from/url 
Branching to: 
svn://some/to/url. 
svn: E731001: Unable to connect to a repository at URL 'svn://some/from/url' 
svn: E731001: Unknown hostname 'some' 
Result: 
Switching to: 
svn://some/to/url. 
svn: E731001: Unable to connect to a repository at URL 'svn://some/to/url.' 
svn: E731001: Unknown hostname 'some' 
Result: 
PS > 

이 출력 결과를 변수에 캡처 할 수 있습니다 내가 만들고있어 몇 가지 다른 통화 다르며 나중에 확인했습니다.

이 두 가지 호출에 대해이를 수행 할 수있는 방법이 있습니까?

+0

스크립트 오류의 경우에는 중지 할 경우 해당 변수를 확인해야합니다 'echo "결과 : $ copyResult"'이것으로 해봤습니까? –

+0

@DipuH 그래, 아무런 차이가 없다. – Kjartan

+0

'Write-Host "결과 : $ copyResult"이것은 하나입니까? –

답변

6

외부 명령의 종료 코드는 $LastExitCode 환경 변수에 저장됩니다.

$copyResult = & svn $arguments 
if ($LastExitCode -ne 0) { 
    exit 
} 

내가 로그 파일이 아닌 변수에 일반 및 오류 출력을 캡처 권하고 싶습니다,하지만 :

& svn $arguments >'C:\path\to\output.log' 2>'C:\path\to\error.log' 
if ($LastExitCode -ne 0) { 
    exit 
} 
관련 문제