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

Powershell 为什么是2>$NULL不将错误重新路由到NULL?,powershell,Powershell,我有以下声明 $CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' ' 2> $NULL 2>$NULL似乎根本没有将错误重新路由到NULL,因为我仍然收到异常 无法验证该变量,因为该值无效 CINPUT变量的值 我想忽略异常,我不知道在这种情况下如何使用-ErrorAction Stop 注意:我知道这一点,并且它可以工作,但我不想使用-erroractionpreference作为脚本的全局设置

我有以下声明

$CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' ' 2> $NULL
2>$NULL
似乎根本没有将错误重新路由到NULL,因为我仍然收到异常

无法验证该变量,因为该值无效 CINPUT变量的值

我想忽略异常,我不知道在这种情况下如何使用
-ErrorAction Stop


注意:我知道这一点,并且它可以工作,但我不想使用
-erroractionpreference
作为脚本的全局设置

2>$NULL
只能抑制写入PowerShell错误流的错误

相反,您的语句会导致.NET异常,该异常在PowerShell中表现为语句终止错误,您可以使用
try
/
catch
:

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

通常,只有当命令只产生非终止错误时,错误流的重定向才会成功。

顺便说一句,如果您不介意,您能告诉我如何将此命令的输出重定向到变量吗?Restore-ASDatabase-Server$Server-RestoreFile$File-Name$CINPUT-Security:$Choice-AllowOverwrite-ErrorActionStop@Cataster:您可以将
try
/
catch
语句直接分配给变量。如果出现语句终止错误且
catch
块不产生输出,则分配
$null
;e、 .g,
$var=try{1/0}catch{}
所以我不可能做这样的事情?ASDatabase-Server$Server-RestoreFile$File-Name$CINPUT-Security:$Choice-AllowOverwrite-ErrorAction Stop>$var@Cataster. 否,但可以使用公共
-OutVariable
参数捕获cmdlet的输出。注意,如果没有发生语句终止错误,它总是创建一个集合;如果有一个语句终止错误,目标变量将根本不会被分配到。sweet,-ov有效,我在你的帖子中找到了一个-ov的解决方法,