Gibt es eine Möglichkeit, die Rückgabewerte innerhalb einer Funktion zu löschen, damit ich sicherstellen kann, dass der Rückgabewert meinen Erwartungen entspricht? Oder vielleicht deaktivieren Sie dieses Verhalten für die Funktion?Gesonderten Ausgangs-/Rückgabewert in einer Powershell-Funktion löschen
In diesem Beispiel erwarte ich, dass der Rückgabewert ein Arraylist enthält („Hallo“, „Welt“)
function GetArray()
{
# $AutoOutputCapture = "Off" ?
$myArray = New-Object System.Collections.ArrayList
$myArray.Add("Hello")
$myArray.Add("World")
# Clear return value before returning exactly what I want?
return $myArray
}
$x = GetArray
$x
jedoch sein, enthält die Ausgabe den erfassten Wert aus den Add-Operationen.
0
1
Hello
World
Ich finde dieses „Feature“ von Powershell sehr ärgerlich, weil sie es wirklich einfach zu brechen Ihre Funktion nur durch eine andere Funktion aufrufen macht, die Sie wissen, hat keinen Wert zurückgegeben.
aktualisieren
Ich verstehe, gibt es Möglichkeiten, die Ausgabe zu verhindern, gefangen zu werden (wie in einer der Antworten unten beschrieben), aber das erfordert, dass Sie wissen, dass eine Funktion einen Wert tatsächlich zurückgibt. Wenn Sie eine andere Powershell-Funktion aufrufen, kann es sein, dass jemand in Zukunft diese Funktion ändert, um einen Wert zurückzugeben, der dann Ihren Code unterbricht.
Wie haben Sie dieses Problem gelöst? Dies ist eine sehr ärgerliche Eigenschaft der Powershell, die nicht die Kontrolle über den Rückgabewert erlaubt. – Feru
Ich habe einfach überall [void] benutzt. Ich entschied auch, dass es einfacher war, komplexe Dinge in C# zu machen, dann benutze Powershell, um sie zusammen zu kleben. – Mas