在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]