我有一个命令mycommand
,有时会给出错误的退出代码,但是我想继续执行脚本,但是我不想禁用其他行的错误退出代码。
在Linux系统上,我可以将命令更改为mycommand || true
,这将确保此行始终成功。如何在Windows上的PowerShell中执行此操作?如果我按原样尝试|| true
,PowerShell将显示“令牌”||“"不是此版本””中的有效语句分隔符。PowerShell中的等效语句分隔符是什么?
我有一个命令mycommand
,有时会给出错误的退出代码,但是我想继续执行脚本,但是我不想禁用其他行的错误退出代码。
在Linux系统上,我可以将命令更改为mycommand || true
,这将确保此行始终成功。如何在Windows上的PowerShell中执行此操作?如果我按原样尝试|| true
,PowerShell将显示“令牌”||“"不是此版本””中的有效语句分隔符。PowerShell中的等效语句分隔符是什么?
4条答案
按热度按时间chhkpiq41#
对于任何给定的命令,无论其形式如何,以下习惯用法都可以确保:
2>$null
丢弃 * 非终止 * 错误以及 * 外部程序 * 的 * stderr * 输出(默认情况下不影响执行流)。try
/catch
捕获所有的 * 终止 * 错误(包括 * 语句 * 和 * 脚本 * 终止错误),并且通过将catch
块留空,执行可以安静地继续。注:
||
和&&
* 在PowerShell (Core) 7+中提供 *-请参见this answer-但是:||
和&&
中是不可能的(除非您先设置$ErrorActionPreference = 'SilentlyContinue'
;否则,您需要try
/catch
,它不能与||
和&&
有意义地组合)。col17t5w2#
解决方案是使用
-ErrorAction SilentlyContinue
common parameter。但是,请注意,这仅适用于Cmdlet,而不是所有命令。如果要运行非Cmdlet命令,则需要将其 Package 在Cmdlet中:wi3ka0sx3#
Try catch block与ErrorAction stop对于常规cmdlet应该很有效
sqserrrh4#
Powershell 7有那个操作符。