2012-11-28 3 views
6

Invoke-Sqlcmd를 사용하여 SQL Server에 연결이 실패하면 PowerShell에서 오류를 catch하는 데 문제가 있습니다. 나는 다음과 같은 오류가Powershell catch catch invoke-sqlcmd

CLS 
$server = "Localhost\fake" 
try 
{ 
    Invoke-Sqlcmd -Query "SELECT DB_NAME() as [Database]" -Server $server 
} 
catch 
{ 
    Write-Host "Error connecting to server " $server 
} 

:이 문제를 설명하는 몇 가지 일반적인 코드

Invoke-Sqlcmd : A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

나는 한 줄의 문장 얻기 위해 기다리고 있었다 :

"오류가 서버 로컬 호스트 \ 가짜 연결을"
+0

나는 powershell v3을 사용하고 있으며 사용자 코드가 사용자 정의 오류를 제공합니다. –

+0

또한 powershell v2에서 –

+0

고마워, 알아두면 분명히, 나는 아직도 2에있어. –

답변

8

오류는 약간 이상한 비 종결 코드로 간주됩니다. 추가 매개 변수 인 Invoke-SqlCommand를 시도하십시오 (-ErrorAction Stop). 오류가 종료되지 않으면 catch 할 수있는 종료 오류로 변환됩니다.

+0

감사합니다. –

-2

CLS 
$server = "Localhost/fake" 
try 
{ 
    Invoke-Sqlcmd -Query "SELECT DB_NAME() as [Database]" -Server $server 
} 
catch 
{ 
    $_ | Out-Null 
    Write-Host "Error connecting to server " $server 
} 

이 오류를 캡처 시도하고 널 (null)과 너무 오래이기 때문에 답변으로 @KeithHill에 의해 해답을 보완하기 위해 추가 정보를 게시하여 쓰기 호스트

+0

두 번째 줄부터 마지막 ​​줄 끝까지 여분이} 있다고 생각합니다. 나는 이것을 시도했지만 여전히 오류가있다. –

2

를 표시 할 리디렉션 의견을 말하면

Write-Error 커맨드 렛으로 오류 레코드를 작성한 경우,이 오류 레코드는 종료되지 않고 -ErrorAction 인수 또는 $ ErrorActionPreference 시스템 변수로 지정된 비헤이비어의 영향을받습니다. throw를 사용한 오류는 종료 중입니다. Write-Error에 대한 설명서를 참조하십시오. PowerShell 도움말 시스템의 about_Throw은 PowerShell 4.0 이하에서 웹 페이지에 언급 된 -Exception 매개 변수가 없습니다. 사용자 정의 오류 정보를 추가하고 그것을 종료 오류를 확인하려면 다음과 같이

, 당신의 catch 블록에서 던져 :

catch 
{ 
    throw (New-Object System.Exception "Error connecting to server $($server).", $_.Exception) 
} 
당신이 지정한대로 종료가 작동하려면

당신은 쓰기 오류를 사용할 수 있습니다 -ErrorAction 인수. PowerShell 4.0 및 그 이하 버전에서 쓰기 오류 커맨드 릿은 -Exception 인수를 허용하지 않으므로 InnerException을 제공하지 않습니다. 즉, 호출자는 원래 예외를 판별해야하는 경우 $ Error 시스템 변수에서 콜렉션을 검사해야합니다. 이후 버전에서는 catch 블록에 Write-Error -Message "Some additional error information." -Exception $_.Exception을 사용할 수 있습니다.