PowerShell function und return
Hallo,
ich will in PowerShell eine Funktion schreiben, die einen Wert zurück gibt. Dabei stoße ich auf das eine Funktion alles Output zurück gibt, was nicht aufgefangen wird.
gibt eben nicht "aergerloech" zurück, sondern gleich 10x aergerloech (was dann natürlich schon sehr ärgerlich ist). Sucht man ein wenig, so findet man heraus, dass das Problem durchaus bekannt ist. Aber was ich noch nicht finden konnte ist eine Lösung dafür. Wenn man vor das $sb.Append ein [void] setzt, bekommt man nur ein aergerloech, aber davor ein Leerzeichen. Man müsste also bei jeder FUnktion genau suchen, welche Zeile alles einen Output produziert, und den dann jeweils unterdrücken. Aber das kann doch wohl nicht die Lösung sein! Gibt es kein "Verwerfe allen Output", damit dann anschließend tatsächlich nur der bei return angegebenen Wert zurückgegeben wird?
Gruß
Filipp
ich will in PowerShell eine Funktion schreiben, die einen Wert zurück gibt. Dabei stoße ich auf das eine Funktion alles Output zurück gibt, was nicht aufgefangen wird.
function Clean-String([string] $toClean, [string]$returnValue){
$sb = New-Object -TypeName "System.Text.StringBuilder"
$replaceChars = @{"ä" = "ae"; "ö" = "oe"}
[string] $c
for([int] $i = 0; $i -lt $toClean.Length; $i++){
$c = ($toClean[$i]).ToString()
if($replaceChars.ContainsKey($c)){
$sb.Append($replaceChars[$c])
} else {
$sb.Append($c)
}
}
return $sb.ToString()
}
$a = Clean-String "Ärgerlöch"
Write-Host $a
gibt eben nicht "aergerloech" zurück, sondern gleich 10x aergerloech (was dann natürlich schon sehr ärgerlich ist). Sucht man ein wenig, so findet man heraus, dass das Problem durchaus bekannt ist. Aber was ich noch nicht finden konnte ist eine Lösung dafür. Wenn man vor das $sb.Append ein [void] setzt, bekommt man nur ein aergerloech, aber davor ein Leerzeichen. Man müsste also bei jeder FUnktion genau suchen, welche Zeile alles einen Output produziert, und den dann jeweils unterdrücken. Aber das kann doch wohl nicht die Lösung sein! Gibt es kein "Verwerfe allen Output", damit dann anschließend tatsächlich nur der bei return angegebenen Wert zurückgegeben wird?
Gruß
Filipp
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 185522
Url: https://administrator.de/contentid/185522
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar
Die Lösung ist doch recht einfach zu finden:
http://rkeithhill.wordpress.com/2007/09/16/effective-powershell-item-7- ...
Dort gibt es sogar dein Beispiel mit dem StringBuilder und die genaue Erklärung, warum das passiert.
Und jetzt schauen wir mal warum [void] nicht funktioniert:
Du bekommst also immer noch ein Array zurück, also hast du vergessen was zu capturen.
Und wenn du jetzt deinen Code durchgehst, dann siehst du recht schnell, dass dein
daran schuld ist.
Und das ist ohnehin überflüssig, weil in Powershell Variablen nicht vor der Benutzung deklariert werden müssen.
Schon passt es...
http://rkeithhill.wordpress.com/2007/09/16/effective-powershell-item-7- ...
Dort gibt es sogar dein Beispiel mit dem StringBuilder und die genaue Erklärung, warum das passiert.
Und jetzt schauen wir mal warum [void] nicht funktioniert:
echo $a.GetType().FullName
echo $a
System.Object
a
aergerloech
Du bekommst also immer noch ein Array zurück, also hast du vergessen was zu capturen.
Und wenn du jetzt deinen Code durchgehst, dann siehst du recht schnell, dass dein
[string] $c
Und das ist ohnehin überflüssig, weil in Powershell Variablen nicht vor der Benutzung deklariert werden müssen.
echo $a.GetType().FullName
echo $a
System.String
aergerloech
Schon passt es...