Захват кода возврата Snowsql в сценарии PowerShell

Я использую сценарий PowerShell для запуска файла sql с помощью SnowSQL. Моя идея состоит в том, чтобы использовать сценарий PowerShell в качестве общей оболочки для запуска различных файлов sql с разными входными параметрами, выполняемых из заданий, запланированных в планировщике предприятия.

Ниже приведен фрагмент файла сценария PowerShell:

$Command = '&"C:\Program Files\Snowflake SnowSQL\snowsql.exe"' + ' --config "' + $ConfigFilePath + '" --filename "' + $sFilePath + '\' + $sFileName + '.sql"' + $sParams

Invoke-Expression -Command $Command

Файл sql, выполняемый через Snowsql, содержит несколько пакетных операторов. Мой вопрос в том, как я могу записать код возврата из выполнения файла. В частности, код ошибки, даже если сбой хотя бы одного из пакетных операторов внутри sql-файла (а не только статус последнего пакетного оператора в sql-файле).

Я нашел ниже из вопросов сообщества Snowflake. Но когда я использую его после строки Invoke-Expression в сценарии PowerShell, все, что я получаю, - это строка, напечатанная как есть.

эхо% errorlevel%

Пожалуйста помоги.

ИЗМЕНИТЬ 9/11/2020 Я узнал, что эквивалент% errorlevel% в PowerShell равен $ ?. Итак, я добавил $? после строки Invoke-Expression в моем файле сценария PowerShell. Но он всегда возвращает TRUE (что означает успех), даже если сценарий snowsql завершается с ошибкой.

Есть мысли, пожалуйста?

Спасибо. Шрини Силам


person user3365490    schedule 10.09.2020    source источник


Ответы (1)


Наконец, после небольшого дополнительного исследования я нашел ответ.

$ LastExitCode предоставит код выхода из выполнения snowsql. И, чтобы это работало правильно, мы должны установить параметр exit_on_error = true в файле конфигурации snowsql или передать его в качестве параметра командной строки.

Теперь мой код выглядит так, как показано ниже

$Command = '&"C:\Program Files\Snowflake SnowSQL\snowsql.exe"' + ' --config "' + $ConfigFilePath + '" --filename "' + $sFilePath + '\' + $sFileName + '.sql"' + $sParams

Invoke-Expression -Command $Command

Write-Host "Snowsql returned exit code: $LastExitCode"

exit $LastExitCode

person user3365490    schedule 11.09.2020