我有一些代码:
$foo = someFunction
Run Code Online (Sandbox Code Playgroud)
这会输出一条警告消息,我想将其重定向到$ null:
$foo = someFunction > $null
Run Code Online (Sandbox Code Playgroud)
问题在于,当我这样做时,在成功抑制警告消息的同时,它也会产生负面的副作用,即不使用函数的结果填充$ foo.
如何将警告重定向到$ null,但仍然保持$ foo填充?
另外,如何将标准输出和标准错误重定向到null?(在Linux中,它是2>&1.)
小智 136
我更喜欢这种方式来重定向标准输出(本机PowerShell)......
($foo = someFunction) | out-null
Run Code Online (Sandbox Code Playgroud)
但这也有效:
($foo = someFunction) > $null
Run Code Online (Sandbox Code Playgroud)
在使用"someFunction"结果定义$ foo后重定向标准错误,执行
($foo = someFunction) 2> $null
Run Code Online (Sandbox Code Playgroud)
这实际上与上面提到的相同.
或者从"someFunction"重定向任何标准错误消息,然后使用结果定义$ foo:
$foo = (someFunction 2> $null)
Run Code Online (Sandbox Code Playgroud)
要重定向两者,您有几个选项:
2>&1>$null
2>&1 | out-null
Run Code Online (Sandbox Code Playgroud)
应使用Write-Warningcmdlet编写警告消息,这允许使用-WarningAction参数或$WarningPreference自动变量抑制警告消息。需要使用一个函数CmdletBinding来实现此功能。
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'
Run Code Online (Sandbox Code Playgroud)
要在命令提示符下缩短它,您可以使用-wa 0:
PS> WarningTest 'parameter alias test' -wa 0
Run Code Online (Sandbox Code Playgroud)
Write-Error、Write-Verbose 和 Write-Debug 为其相应类型的消息提供类似的功能。
如果你想隐藏它的错误,你可以这样做
$ErrorActionPreference = "SilentlyContinue"; #This will hide errors
$someObject.SomeFunction();
$ErrorActionPreference = "Continue"; #Turning errors back on
Run Code Online (Sandbox Code Playgroud)