web-dev-qa-db-ja.com

PowerShell v5:出力の抑制-ネストされた関数のデフォルト出力

出力を抑制したいので、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では、WindowsUpdateのログに変更が加えられました。 「$ env:SystemDrive\Windows\WindowsUpdate.log」ではなく、すべてがETLチャネルに記録されるようになりました。人間が読める形式でログを取得するには、Get-WindowsUpdateLogコマンドを使用してWindowsUpdateLogを生成する必要があります。これにより、抑制したいコンソールに多くの役に立たないものが吐き出されます。コマンドはモジュールの一部であり、Get-WindowsUpdateLogのヘルパー関数はすべてOut-Defaultを使用していることがわかりました。私の例は、モジュールの構築方法を示しています。

3
megamorf

@PetSerAlに感謝します、それは私が望んでいたほどきれいではありませんが、それはトリックをするはずです:-)

&{Set-Alias Out-Default Out-Null; Get-WindowsUpdateLog ...}
2
megamorf

まだ少し壊れていることを除いて、それが可能であることがわかりました。例:

   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-nullに割り当てたままにしておくことができるからです。

0
Bill Moore