Ich habe einen Code:
$foo = someFunction
Dies gibt eine Warnmeldung aus, die ich auf $ null umleiten möchte:
$foo = someFunction > $null
Das Problem ist, dass wenn ich dies tue, während die Warnmeldung erfolgreich unterdrückt wird, dies auch den negativen Nebeneffekt hat, dass $ foo NICHT mit dem Ergebnis der Funktion gefüllt wird.
Wie leite ich die Warnung auf $ null um, halte aber $ foo trotzdem gefüllt?
Wie leiten Sie sowohl die Standardausgabe als auch den Standardfehler auf Null um? (Unter Linux ist es das 2>&1
.)
powershell
ted
quelle
quelle
someFunction
, können Sie es entsprechend ändern.2>/dev/null 1>/dev/null
; Die von Ihnen angezeigte Weiterleitung leitet stderr an dieselbe Stelle wie stdout weiter -/dev/null
möglicherweise eine reguläre Datei oder eine reguläre Datei.Antworten:
Ich würde diese Methode bevorzugen, um die Standardausgabe (native PowerShell) umzuleiten ...
($foo = someFunction) | out-null
Das funktioniert aber auch:
($foo = someFunction) > $null
Um nur den Standardfehler umzuleiten, nachdem $ foo mit dem Ergebnis "someFunction" definiert wurde, tun Sie dies
($foo = someFunction) 2> $null
Dies ist effektiv das gleiche wie oben erwähnt.
Oder um Standardfehlermeldungen von "someFunction" umzuleiten und dann $ foo mit dem Ergebnis zu definieren:
$foo = (someFunction 2> $null)
Um beide umzuleiten, haben Sie einige Möglichkeiten:
2>&1>$null 2>&1 | out-null
quelle
{ myCommandWithAnyOutput & } | Out-Null
Das sollte funktionieren.
$foo = someFunction 2>$null
quelle
Wenn Sie Fehler ausblenden möchten, können Sie dies folgendermaßen tun
$ErrorActionPreference = "SilentlyContinue"; #This will hide errors $someObject.SomeFunction(); $ErrorActionPreference = "Continue"; #Turning errors back on
quelle
Warnmeldungen sollten mit dem
Write-Warning
Cmdlet geschrieben werden , mit dem die Warnmeldungen mit dem-WarningAction
Parameter oder der$WarningPreference
automatischen Variablen unterdrückt werden können. Eine Funktion muss verwendet werdenCmdletBinding
, um diese Funktion zu implementieren.function WarningTest { [CmdletBinding()] param($n) Write-Warning "This is a warning message for: $n." "Parameter n = $n" } $a = WarningTest 'test one' -WarningAction SilentlyContinue # To turn off warnings for multiple commads, # use the WarningPreference variable $WarningPreference = 'SilentlyContinue' $b = WarningTest 'test two' $c = WarningTest 'test three' # Turn messages back on. $WarningPreference = 'Continue' $c = WarningTest 'test four'
Um es an der Eingabeaufforderung zu verkürzen, können Sie Folgendes verwenden
-wa 0
:PS> WarningTest 'parameter alias test' -wa 0
Write-Error, Write-Verbose und Write-Debug bieten ähnliche Funktionen für die entsprechenden Nachrichtentypen.
quelle
mit einer Funktion:
function run_command ($command) { invoke-expression "$command *>$null" return $_ } if (!(run_command "dir *.txt")) { if (!(run_command "dir *.doc")) { run_command "dir *.*" } }
oder wenn Sie Einzeiler mögen:
function run_command ($command) { invoke-expression "$command "|out-null; return $_ } if (!(run_command "dir *.txt")) { if (!(run_command "dir *.doc")) { run_command "dir *.*" } }
quelle