PowerShell v5:抑制嵌套函数中的 Out-Default 输出

PowerShell v5:抑制嵌套函数中的 Out-Default 输出

我想抑制任何输出,然后调用 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,而不必担心破坏脚本。

相关内容