Powershell Try Catch invoke-sqlcmd Powershell Try Catch invoke-sqlcmd powershell powershell

Powershell Try Catch invoke-sqlcmd


It would appear that error is considered non-terminating which is a bit odd. Try the Invoke-SqlCommand with an additional parameter: -ErrorAction Stop. If there error is non-terminating, this will convert it to a terminating error that you can catch.


Posting additional info to supplement the answer by @KeithHill as an answer since it is too long for a comment.

If the error record was created by the Write-Error commandlet it is non-terminating and subject to the behavior specified by the -ErrorAction argument or the $ErrorActionPreference system variable. Errors using throw are terminating. See the documentation for Write-Error (Note that PowerShell 4.0 and below do not have the -Exception parameter mentioned in the web page.) and about_Throw in the PowerShell help system.

If you want to add custom error information and make it a terminating error, throw from your catch block as follows:

catch{    throw (New-Object System.Exception "Error connecting to server $($server).", $_.Exception)}

You can use Write-Error if you want termination to behave as specified by the -ErrorAction argument. In PowerShell 4.0 and below the Write-Error commandlet does not allow a -Exception argument and therefore will not provide an InnerException. That means that the caller would have to examine the collection in the $Error system variable if it needs to determine the original exception. In later versions you can Use Write-Error -Message "Some additional error information." -Exception $_.Exception in your catch block.


Try

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}

This will capture the error and redirect it to null and display your write-host