![PowerShell v5:抑制嵌套函数中的 Out-Default 输出](https://linux22.com/image/1488047/PowerShell%20v5%EF%BC%9A%E6%8A%91%E5%88%B6%E5%B5%8C%E5%A5%97%E5%87%BD%E6%95%B0%E4%B8%AD%E7%9A%84%20Out-Default%20%E8%BE%93%E5%87%BA.png)
我想抑制任何输出,然后调用 function_b:
Function function_a {
"test" | Out-Default
}
function function_b {
[CmdletBInding()]
param()
function_a
}
# These are the things I've tried so far to no avail:
[void](function_b)
$null = function_b
function_b | out-null
function_b *>&1 | Out-null
Windows 10 对 Windows 更新日志进行了更改。现在所有内容都记录到 ETL 通道,而不是“$env:SystemDrive\Windows\WindowsUpdate.log”。为了以人性化格式获取日志,您必须使用 Get-WindowsUpdateLog 命令生成 WindowsUpdateLog,这会向控制台输出大量无用的内容,而我希望抑制这些内容。事实证明,该命令是模块的一部分,Get-WindowsUpdateLog 中的辅助函数都使用 Out-Default。我的示例说明了该模块的构建方式。
答案1
谢谢@PetSerAl,虽然它没有我希望的那么干净,但应该可以解决问题:-)
&{Set-Alias Out-Default Out-Null; Get-WindowsUpdateLog ...}
答案2
我发现这是可行的,只是还有点问题。例如:
PS> function out-default {$input | out-null}
#ok. Works great
PS> mkdir xyz
# output directory object is sent to null and not displayed to out-host
问题是它运行得太好,因为假设您想将对象保存到返回变量中。
PS> $dir = mkdir xyz2
PS> $dir
#nothing to returned!
从积极的一面来看,out-default 的覆盖很容易删除:
PS> del function:out-default
现在预期的默认行为已恢复:
PS> $dir = mkdir xyz3
PS> $dir
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz3
PS> mkdir xyz4
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz4
如果将变量的分配与 out-default 分开,那就太好了。因为这样您就可以将整个脚本的 out-default 分配给 out-null,而不必担心破坏脚本。