执行powershell语句后检测错误

use*_*746 5 powershell sqlplus

我正在使用 powershell 运行sqlplus,我希望 PowerShell 在脚本运行后检测是否有错误并执行一些操作,而不是查看结果文件。

& 'sqlplus' 'system/myOraclePassword' '@Test' | out-file 'result.txt';
Run Code Online (Sandbox Code Playgroud)

通常在DOS中,命令遇到错误时会出现%errorlevel%,不知道PowerShell中是否有类似的东西?

当然,我可以自己阅读日志文件,但有时,事情太常规了,我可能会忘记。

我的Test.sql:

select level from dual
connect by level<5;
select 10/0 from dual;
quit;
Run Code Online (Sandbox Code Playgroud)

显然有一个除以零误差。result.txt 捕获了它,但我希望 powershell 也检测到它

SQL*Plus:2017 年 4 月 27 日星期四 16:24:30 发布 12.1.0.2.0 生产版

版权所有 (c) 1982, 2014,甲骨文。版权所有。

上次成功登录时间:2017年4月27日星期四16:17:34 -04:00

连接到:
Oracle Database 12c 企业版 12.1.0.2.0 版 - 64 位生产
使用分区、OLAP、高级分析和实际应用程序测试选项


     等级
----------
     1
     2
     3
     4

从双中选择 10/0
         *
第 1 行的错误:
ORA-01476: 除数等于零

powershell语句像DOS一样执行后会返回errorlevel吗?

我试过了:

& 'sqlplus' 'system/myOraclePassword' '@Test' | out-file 'result.txt';
if (errorlevel 1)
{ write-host error;
}
else
{ write-host ok;
}
Run Code Online (Sandbox Code Playgroud)

但这导致了语法错误?

errorlevel :术语“errorlevel”不能识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

在powershell中检查错误的正确方法是什么?

更新

我用过这个:

if ($LASTEXITCODE -ne 0 )
{ 
write-host error;
}
else
{ 
write-host ok;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ndl 4

由于您正在调用可执行文件,因此您可能需要检查$LASTEXITCODE变量或sqlplus 的返回值。在 PowerShell 中,每个变量都有一个$前缀。

  • 可能值得注意的是,如果他感兴趣的是是否“成功”(以零错误代码退出),而不是退出时的特定错误代码,他还可以测试“$?”,这将零错误代码(成功)为“$true”,非零退出(失败)为“$false”。 (2认同)
  • @user1205746 - `$LastExitCode` 捕获最近运行的外部可执行文件的退出代码。如果您的 SQL 脚本被编写为在发生某种类型的 SQL 错误时使用特定值退出,则该值将在“$LastExitCode”中找到,就像在经典批处理中的“%ERRORLEVEL%”中一样脚本。 (2认同)