PowerShell v5: Suprimir saída padrão de saída em funções aninhadas

3

Gostaria de suprimir qualquer saída e, em seguida, function_b é invocado:

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

O Windows 10 introduziu uma alteração no registro do Windows Update. Tudo agora está registrado em canais ETL em vez de "$ env: SystemDrive \ Windows \ WindowsUpdate.log". Para obter os logs em um formato legível por humanos, você precisa gerar o WindowsUpdateLog com o Comando Get-WindowsUpdateLog, que expele muitas coisas inúteis para o console que gostaria de suprimir. Como se constata, o comando faz parte de um módulo e as funções auxiliares em Get-WindowsUpdateLog usam Out-Default. Meu exemplo ilustra a maneira como o módulo é construído.

    
por megamorf 28.03.2016 / 10:45

2 respostas

2

Obrigado @PetSerAl, isso deve funcionar mesmo que não seja tão limpo quanto eu esperava: -)

&{Set-Alias Out-Default Out-Null; Get-WindowsUpdateLog ...}
    
por 29.03.2016 / 14:32
0

Eu descobri que é possível, exceto que ainda está um pouco quebrado. Exemplo:

   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

O problema é que ele funciona muito bem, porque digamos que você queira salvar o objeto em uma variável de retorno.

   PS> $dir = mkdir xyz2

   PS> $dir
   #nothing to returned!

No lado positivo, a substituição de out-default é fácil de excluir:

   PS> del function:out-default

Agora, o comportamento padrão esperado é revertido:

   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

Seria bom se a atribuição de uma variável fosse separada de out-default. Porque então você poderia simplesmente deixar o out-default designado como out-null para o script inteiro sem se preocupar em quebrar o script.

    
por 19.12.2017 / 19:34