0

我正在使用 powershell 脚本来运行使用 SnowSQL 的 sql 文件。我的想法是使用 powershell 脚本作为通用包装器来运行具有不同输入参数的各种 sql 文件,这些文件是从企业调度程序中调度的作业中执行的。

以下是 powershell 脚本文件的片段:

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

Invoke-Expression -Command $Command

通过 Snowsql 执行的 sql 文件包含多个批处理语句。我的问题是,如何从文件的执行中捕获返回代码。特别是,即使 sql 文件中的至少一个批处理语句失败(不仅仅是 sql 文件中最后一个批处理语句的状态),也会出现错误代码。

我从雪花社区问题中找到了以下内容。但是,当我在 powershell 脚本中的 Invoke-Expression 行之后使用它时,我得到的只是按原样打印的字符串。

回显 %errorlevel%"

请帮忙。

编辑 2020 年 9 月 11 日 我了解到在 powershell 中相当于 %errorlevel% 是 $?。所以,我加了$?在我的 powershell 脚本文件中的 Invoke-Expression 行之后。但是,即使 snowsql 脚本因错误而失败,它也始终返回 TRUE(表示成功)。

请问有什么想法吗?

谢谢你。斯里尼·西拉姆

4

1 回答 1

0

最后,经过一番研究,我找到了答案。

$LastExitCode 将提供 snowsql 执行的退出代码。而且,为了使其正常工作,我们必须在 snowsql 配置文件中设置“exit_on_error=true”选项或将其作为命令行参数传递。

我的代码现在如下所示

$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

于 2020-09-11T23:37:38.703 回答