在PowerShell中将输出redirect到$ null,但确保variables保持设置

我有一些代码:

$foo = someFunction 

这输出一个警告消息,我想redirect到$ null:

 $foo = someFunction > $null 

问题是,当我这样做的时候,在成功禁止警告消息的同时,也会带来不利用函数的结果填充$ foo的消极副作用。

如何将警告redirect到$ null,但仍保持$ foo填充?

另外,你如何将标准输出和标准错误redirect为空? (在Linux中,它是2>&1 。)

我更喜欢这种方式来redirect标准输出(本机PowerShell)…

 ($foo = someFunction) | out-null 

但是,这也是有效的:

 ($foo = someFunction) > $null 

在定义$ foo和“someFunction”的结果之后,redirect标准错误

 ($foo = someFunction) 2> $null 

这与上面提到的实际上是一样的。

或者redirect来自“someFunction”的任何标准错误消息,然后用结果定义$ foo:

 $foo = (someFunction 2> $null) 

要redirect,你有几个select:

 2>&1>$null 2>&1 | out-null 

这应该工作。

  $foo = someFunction 2>$null 

如果你想隐藏你的错误,你可以这样做

 $ErrorActionPreference = "SilentlyContinue"; #This will hide errors $someObject.SomeFunction(); $ErrorActionPreference = "Continue"; #Turning errors back on 

警告消息应该使用Write-Warning cmdlet Write-Warning ,这可以使用-WarningAction参数或$WarningPreference自动variables来抑制警告消息。 一个函数需要使用CmdletBinding来实现这个function。

 function WarningTest { [CmdletBinding()] param($n) Write-Warning "This is a warning message for: $n." "Parameter n = $n" } $a = WarningTest 'test one' -WarningAction SilentlyContinue # To turn off warnings for multiple commads, # use the WarningPreference variable $WarningPreference = 'SilentlyContinue' $b = WarningTest 'test two' $c = WarningTest 'test three' # Turn messages back on. $WarningPreference = 'Continue' $c = WarningTest 'test four' 

要在命令提示符下缩短它,可以使用-wa 0

 PS> WarningTest 'parameter alias test' -wa 0 

写入错误,写入详细和写入debugging为其相应types的消息提供类似的function。

假设首先返回错误消息:

  $foo = someFunction $foo = $foo[1] 

如果variables值先返回:

  $foo = someFunction $foo = $foo[0]