Scharping-FVB 11 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai Liebes Forum, ich möchte innerhalb einer Funktion eine weitere Funktion nutzen. Diese bekommt eine Variable übergeben und soll diese verändern. Den geänderten Wert soll die Kind-Funktion an die Mutter-Funktion zurückgeben, damit damit weiter gearbeitet werden kann. Leider gilt die geänderte Variable nur innerhalb der Kind-Funktion, nicht außerhalb. Wie kann ich den Wert an die Mutter-Funktion zurückgeben? Die Lösung ist sicherlich simpel, doch ich habe da irgendwie ein Brett vor dem Kopf. Viele Grüße Davorin Zitieren Link zu diesem Kommentar
Beste Lösung testperson 1.627 Geschrieben 17. Mai Beste Lösung Melden Teilen Geschrieben 17. Mai Hi, das wäre "return": about Return - PowerShell | Microsoft Learn function test1{ $x = Read-Host -Prompt "Zahl1" $y = Read-Host -Prompt "Zahl2" $z = test2 -a $x -b $y Write-Host "$x + $y = $z" } function test2{ param([int]$a, [int]$b) $c = $a + $b return $c } test1 HTH Jan Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 17. Mai Autor Melden Teilen Geschrieben 17. Mai Nicht ganz. funtion Mutter { Param( [parameter(Mandatory = $true)] [string] $user funktion Kind ([string]$user) { $user = $user.Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("Ä", "Ae").Replace("Ö", "Oe").Replace("Ü", "Ue").Replace("ß","ss") Return $user } # Ersetze Umlaute Kind $user Write-Host "Neuer Username ohne Umlaute ist: $user" } Aufruf mit: Mutter "Müller" Da sollte dann die Ausgabe mit Mueller erfolgen. Es wird aber durch das Return $user nach dem Ersetzen an der Konsole ausgegeben, aber nicht in die MUtter-Variable übernommen. In der Mutter-Funktion bleibt $user unverändert. Zitieren Link zu diesem Kommentar
testperson 1.627 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai Nun, Nutze doch bitte, bitte, bitte die Code Tags hier im Board Strukturiere den Code doch mal grob nach meinem Beispiel Code vor 38 Minuten schrieb Scharping-FVB: Es wird aber durch das Return $user nach dem Ersetzen an der Konsole ausgegeben, aber nicht in die MUtter-Variable übernommen. In der Mutter-Funktion bleibt $user unverändert. Das liegt daran, dass die Variable "$User" in den beiden Funktionen nichts miteinander am Hut haben. Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai Ich glaube nicht, dass du Funktionen innerhalb von Funktionen schreiben kannst. Schreibe alle Funktionen untereinander. Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 17. Mai Autor Melden Teilen Geschrieben 17. Mai (bearbeitet) Brett vorm Kopp... $user = ersetze -user $user Es kann so einfach sein... Vielen Dank und bitte entschuldige das Code-Desaster... bearbeitet 17. Mai von Scharping-FVB Zitieren Link zu diesem Kommentar
testperson 1.627 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai $User = Ersetze -user $User Du musst die Rückgabe ja auch irgendwo speichern. Zitieren Link zu diesem Kommentar
cj_berlin 1.285 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai vor einer Stunde schrieb testperson: das wäre "return": about Return - PowerShell | Microsoft Learn ...wobei return als LETZTE Anweisung innerhalb einer Funktion vollkommen optional ist, sprich, $rueckgabeWert ist äquivalent zu return $rueckgabeWert Erst wenn return dazu verwendet wird, in einem bestimmten Zweig aus der Funktion auszusteigen, entfaltet es eine wirkliche Wirkung. In Klassen sieht es wieder anders aus Dies nur als "unnützes Wissen zum Freitag". 2 Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 17. Mai Autor Melden Teilen Geschrieben 17. Mai vor 26 Minuten schrieb Dukel: Ich glaube nicht, dass du Funktionen innerhalb von Funktionen schreiben kannst. Schreibe alle Funktionen untereinander. Doch, das geht Jetzt auch mit dem richtigen Ausgabewert. Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai vor 8 Minuten schrieb Scharping-FVB: Doch, das geht Jetzt auch mit dem richtigen Ausgabewert. Würde ich aber nicht machen. 1. brauchst du dann keine Funktion 2. Ist es übersichtlicher und du kannst die Funktion Problemlos mehrmals verwenden: function umlaute {} function username { ... umlaute ... } function adresse { ... umlaute ... } function email { ... umlaute ... } Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 17. Mai Autor Melden Teilen Geschrieben 17. Mai vor 4 Minuten schrieb Dukel: Würde ich aber nicht machen. 1. brauchst du dann keine Funktion 2. Ist es übersichtlicher und du kannst die Funktion Problemlos mehrmals verwenden: function umlaute {} function username { ... umlaute ... } function adresse { ... umlaute ... } function email { ... umlaute ... } Ja, du hast Recht, das klappt auch. Ist meine erste Funktion, die ich schreibe, ich lerne noch Vielen lieben Dank an euch alle, es ist großartig, wie schnell und kompetent hier geholfen wird! Zitieren Link zu diesem Kommentar
testperson 1.627 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai vor 22 Minuten schrieb cj_berlin: ...wobei return als LETZTE Anweisung innerhalb einer Funktion vollkommen optional ist, sprich Meine PowerShell "Takt, Stil und Etikette" sowie der innerer Monk erfreuen sich immer an einem "return". :) Zitieren Link zu diesem Kommentar
daabm 1.303 Geschrieben 17. Mai Melden Teilen Geschrieben 17. Mai Nachdem Ihr jetzt schon viel diskutiert habt, werfe ich noch "scope" in den Raum und [ref]. Ich glaube, jede Suchmaschine liefert passende vertiefende Hinweise @testperson Mein Monk achtet peinlichst darauf, die Pipeline sauber zu halte vor unbeabsichtigtem Inhalt, macht es wie @cj_berlin und gibt einfach das Ergebnis "aus", womit es in ebenjener Pipeline und damit im Return des aufrufenden Scope landet. "Return" hilft da nicht - alles was unbeabsichtigt in der Pipeline gelandet ist, wird ebenso zurückgegeben. @Dukel Das mit dem Scope gilt auch für Funktionen - jede "Hauptfunktion" kann ihre eigene Childversion von "Kind{}" haben. Macht es im Zweifel nicht einfacher, ist aber manchmal durchaus hilfreich, weil importierte Funktionen nicht die eigenen stören können. 2 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.