在Powershell脚本中捕获Snowsql返回代码

如何解决在Powershell脚本中捕获Snowsql返回代码

我正在使用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%”

请帮助。

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

有什么想法吗?

谢谢。 Srini Seelam

解决方法

最后,经过更多研究,我找到了答案。

$ 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?