powershell 为什么2>$NULL不将错误重路由到NULL?

sd2nnvve  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(208)

我有以下声明。

$CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' ' 2> $NULL

2> $NULL看起来根本没有将错误重路由为NULL,因为我仍然在接收异常。
无法验证变量,因为该值不是CINPUT变量的有效值。
我想忽略这个异常,但我不知道在这种情况下如何使用-ErrorAction Stop
注意:我知道它,它的工作,但我不想使用-erroractionpreference作为我的脚本的全局设置。

fykwrbwg

fykwrbwg1#

2> $NULL只能隐藏写入 *PowerShell错误数据流 * 的错误。
相反,您的语句会导致 *.NET异常 *,该异常在PowerShell中表现为 * 语句终止错误 *,您可以使用try/catch处理该异常:

try {
  $CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' '
} catch {} # ignore the statement-terminating error

通常,错误流的重定向-2>-仅在命令仅产生 * 非终止 * 错误时才会成功。
调用 * 外部程序 * 时,2>会重定向其 stderr 输出。

相关问题