function - 如何将函数的值输出到调用者而不是控制台

标签 function powershell

假设我有这个简单的 PowerShell 函数:

function testit() {
    return $true > $null
}

Write-Host "testing"
$thistest = testit 
Write-Host "value = $thistest"

当我在我的 PowerShell 脚本中使用它时,我想在脚本中接收值,但我不希望它显示在控制台中。

如何将返回值保留在管道中,但只是从控制台隐藏它?

如果我使用 > $null 那么它会完全抑制输出 - 我只是希望它不显示在控制台中,但我仍然想要这个值。

最佳答案

作为documented PowerShell 函数将所有未捕获的输出返回给调用者。如果调用者不对返回值执行任何操作,PowerShell 会自动将其传递给 Out-Default , 然后转发给 Out-Host (参见 Don Jones 撰写的 this article)。

在函数内部的返回值上使用重定向运算符可以有效地抑制返回值,这样函数就不会返回任何东西。

如果你有这样的功能:

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

关于function - 如何将函数的值输出到调用者而不是控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475205/

相关文章:

javascript - 使用 JQuery 如何将每隔一行涂成黑色?

python - 列表列表的切片行为问题

Vi模式下的Windows终端/控制台/shell ?

powershell - Powershell查找注册表项并将其删除

ios - 返回函数 objective-c

带有菜单功能的 Python 主函数循环不起作用?

Powershell 构建步骤,一劳永逸?

powershell - 如何使用 7zip 解压缩文件并将其复制到特定位置?

powershell - 在资源组上使用 CpuPercentage 时,Azure PowerShell Add-AlertRule 返回错误请求

r - 如果 "a"和 "b"在 R 中的前 4 个小数位相同,则认为它们相等