假设我有这个简单的 PowerShell 函数:
function testit() {
return $true > $null
}
Write-Host "testing"
$thistest = testit
Write-Host "value = $thistest"
当我在 PowerShell 脚本中使用它时,我想接收脚本中的值,但不希望它显示在控制台中。
如何将返回值保留在管道中但只是将其从控制台隐藏?
如果我使用> $null
然后它完全抑制输出 - 我只是希望它不显示在控制台中,但我仍然想要该值。
As 记录在案PowerShell 函数将所有未捕获的输出返回给调用者。如果调用者不对返回值执行任何操作,PowerShell 会自动将其传递给Out-Default,然后将其转发到Out-Host (see 本文唐·琼斯撰写)。
在函数内部的返回值上使用重定向运算符可以有效地抑制返回值,以便函数不会返回任何内容。
如果你有这样的函数:
function testit {
return $true
}
并单独调用它:
testit
PowerShell 隐式执行此操作:
testit | Out-Default
这实际上变成了
testit | Out-Host
如果您捕获变量中的返回值
$thistest = testit
该值存储在变量中,而控制台上不显示任何内容。
如果您重定向输出或将其通过管道传输到Out-Null
testit >$null
testit | Out-Null
返回值被丢弃,控制台上不显示任何内容。
如果您想阻止 PowerShell 将管道末尾未捕获的输出传递到的默认行为Out-Host
你可以通过覆盖来做到这一点Out-Default
像这样:
filter Out-Default { $_ | Out-Null }
或者(正如@PetSerAl在评论中指出的那样)像这样:
filter Out-Default {}
但是,请注意此修改会禁用Out-Default
对于当前范围内的所有内容,直到您再次删除过滤器。如果你做例如Get-ChildItem
当过滤器处于活动状态时,除非您明确地将输出写入主机控制台,否则不会显示任何内容:
Get-ChildItem | Out-Host
您可以像这样删除过滤器:
Remove-Item function:Out-Default
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)