PowerShell Version 5: Out-Default-Ausgabe in verschachtelten Funktionen unterdrücken

769
megamorf

Ich möchte jede Ausgabe unterdrücken, wenn function_b aufgerufen wird:

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 hat die Windows Update-Protokollierung geändert. Jetzt wird alles in ETL-Kanälen protokolliert, anstatt "$ env: SystemDrive \ Windows \ WindowsUpdate.log". Um die Protokolle in einem für Menschen lesbaren Format zu erhalten, müssen Sie das WindowsUpdateLog mit dem Befehl Get-WindowsUpdateLog generieren, das eine Menge nutzloses Material an die Konsole ausgibt, das ich unterdrücken möchte. Wie sich herausstellt, ist der Befehl Teil eines Moduls, und alle Hilfsfunktionen in Get-WindowsUpdateLog verwenden Out-Default. Mein Beispiel zeigt, wie das Modul aufgebaut ist.

3
`& ` PetSerAl vor 8 Jahren 1

2 Antworten auf die Frage

2
megamorf

Danke @PetSerAl, das sollte den Trick tun, auch wenn es nicht so sauber ist, wie ich es mir erhofft hatte :-)

& 
0
Bill Moore

Ich fand heraus, dass es möglich ist, außer dass es noch ein bisschen kaputt ist. Beispiel:

 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 

Das Problem ist, dass es zu gut funktioniert, weil wir das Objekt in einer Rückgabevariable speichern wollen.

 PS> $dir = mkdir xyz2  PS> $dir #nothing to returned! 

Positiv ist, dass die Außerkraftsetzung leicht überschrieben werden kann:

 PS> del function:out-default 

Jetzt wird das erwartete Standardverhalten zurückgesetzt:

 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 

Es wäre schön, wenn die Zuweisung einer Variablen von der Standardeinstellung getrennt wäre. Denn dann können Sie den Out-Default für das gesamte Skript einfach Out-Null zuweisen, ohne sich Gedanken darüber machen zu müssen, dass das Skript beschädigt wird.

IMHO sollten Sie `#nothing to return! 'In` #nothing to display! `Ändern, da $ dir` einen Wert von` mkdir xyz2` zurückgegeben hat, der jedoch nicht angezeigt wird. Wenn Sie Funktionen definieren möchten, die nichts tun, benötigen Sie `$ input | out-null` part: `function out-default {}`. PetSerAl vor 6 Jahren 0