2011-01-22 4 views
12

Я хочу поймать invoke-sql, если что-то не так. Но когда я запускаю следующую команду, и если $ sql недействителен, ее нельзя поймать. Как поймать это исключение?powershell: как поймать причину ошибки invoke-sqlcmd?

try { 
    Invoke-Sqlcmd -Query $sql -ServerInstance t1 -database db -QueryTimeout 65535 -ErrorAction 'Stop' 
    } catch{ 
     "error when running sql $sql" 
    } 

ответ

21

У меня нет вопроса, используя скрипт под названием Test.ps1

add-pssnapin SqlServerCmdletSnapin100 
get-host 
$sql = "selects * from syscomments" 
$server = "" 
$database = "" 
$username = "" 
$password = "" 
try { 
    Invoke-Sqlcmd -Query $sql -ServerInstance $server -database $database -QueryTimeout 65535 -ErrorAction 'Stop' -username $username -password $password 
} catch { 
    "error when running sql $sql" 
    Write-Host($error) 
} 

И выход

PS C:\> .\test.ps1 
Name    : ConsoleHost 
Version   : 2.0 
InstanceId  : 9ac019da-97bd-45d1-bfa5-65fb4d376dc6 
UI    : System.Management.Automation.Internal.Host.InternalHostUserInterface 
CurrentCulture : en-AU 
CurrentUICulture : en-US 
PrivateData  : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 
IsRunspacePushed : False 
Runspace   : System.Management.Automation.Runspaces.LocalRunspace 

error when running sql selects * from syscomments 

Incorrect syntax near '*'. 

какие входные параметры вы используете, вы с помощью PowerShell 1 или 2 ?

+7

'$ error' - это список всех ошибок в текущей рабочей области. В блоке catch вы хотите использовать '$ _', чтобы увидеть текущую ошибку. –

+0

Извините, я снова проверил свой код, он работает, я должен сделать ошибку во время теста. –

Смежные вопросы