我有一些代码:
$foo = someFunction
这会输出一条警告消息,我想将其重定向到$ null:
$foo = someFunction > $null
问题在于,当我这样做时,在成功抑制警告消息的同时,它也会产生负面的副作用,即不使用函数的结果填充$ foo。
如何将警告重定向到$ null,但仍然保持$ foo填充?
另外,如何将标准输出和标准错误重定向到空? (在Linux中,它是2>&1
。)
答案 0 :(得分:128)
我更喜欢这种方式来重定向标准输出(本机PowerShell)......
($foo = someFunction) | out-null
但这也有效:
($foo = someFunction) > $null
要在定义带有“someFunction”结果的$ foo后重定向标准错误,请执行
($foo = someFunction) 2> $null
这实际上与上面提到的相同。
或者从“someFunction”重定向任何标准错误消息,然后使用结果定义$ foo:
$foo = (someFunction 2> $null)
要重定向两者,您有几个选项:
2>&1>$null
2>&1 | out-null
答案 1 :(得分:11)
这应该有用。
$foo = someFunction 2>$null
答案 2 :(得分:5)
如果您想隐藏它的错误,可以像这样做
$ErrorActionPreference = "SilentlyContinue"; #This will hide errors
$someObject.SomeFunction();
$ErrorActionPreference = "Continue"; #Turning errors back on
答案 3 :(得分:4)
应使用Write-Warning
cmdlet编写警告消息,这样可以使用-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'
要在命令提示符下缩短它,可以使用-wa 0
:
PS> WarningTest 'parameter alias test' -wa 0
Write-Error,Write-Verbose和Write-Debug为相应类型的消息提供类似的功能。
答案 4 :(得分:0)
使用功能:
function run_command ($command)
{
invoke-expression "$command *>$null"
return $_
}
if (!(run_command "dir *.txt"))
{
if (!(run_command "dir *.doc"))
{
run_command "dir *.*"
}
}
或者如果您喜欢单线:
function run_command ($command) { invoke-expression "$command "|out-null; return $_ }
if (!(run_command "dir *.txt")) { if (!(run_command "dir *.doc")) { run_command "dir *.*" } }