marabunta
Goto Top

Powershell Funktion X innerhalb von Funktion X aufrufen

Hi,

Function X{
$SimpleSchalter=Read-Host "ModusA = 0 ; ModusB = 1 . Bitte waehlen"  

if($SimpleSchalter -eq "0")  
{
    $Modus="00"  
    New-Item -Path C:\Temp\ -Name test.txt -Value $Modus -ItemType File -Force
    
}else{
    if($SimpleSchalter -eq "1")  
    {
        $Modus="11"  
    New-Item -Path C:\Temp\ -Name test.txt -Value $Modus -ItemType File -Force
    }else{
        Write-Host "Auswahl ungueltig. Nochmal versuchen."  
        X # <<<<<-----
    }
}
}

Ich konnte es jetzt nicht nachstellen. So funktioniert alles gut. Wenn ich aber einige Male falsche Werte eintrage und die Funktion erneut beginnt, dann kann es passieren(in dem bsp. leider nicht?!), dass die "richtige auswahl" mehrfach ausgeführt wird. Vielleicht ist das jemandem schon aufgefallen und weiß weiter. remove/clear-variable vor dem erneuten aufruf hat nichts geändert....

Content-Key: 270408

Url: https://administrator.de/contentid/270408

Printed on: April 18, 2024 at 07:04 o'clock

Mitglied: 114757
Solution 114757 Apr 27, 2015, updated at Apr 28, 2015 at 09:35:05 (UTC)
Goto Top
Moin,
mach das besser so:
Function X{
 while($true){
    $SimpleSchalter=Read-Host "ModusA = 0 ; ModusB = 1 . Bitte waehlen"  
    Switch($SimpleSchalter){
        '0' {New-Item -Path C:\Temp\ -Name test.txt -Value "00" -ItemType File -Force; return}  
        '1' {New-Item -Path C:\Temp\ -Name test.txt -Value "11" -ItemType File -Force; return}  
        default {Write-Host "Auswahl ungueltig. Nochmal versuchen."}  
  }
}

Bei deiner Rekursiven Funktion die sich selber aufruft müssen ja sich alle Instanzen beenden (denn sie warten ja auf Beendigung dieser) und je nachdem wo sich die Funktion selber aufruft ist es so das ältere Instanzen an der Stelle weiter machen wo du sie in sich selbst aufgerufen hast, dann kommt es zu dem Verhalten. Wenn du das unbedingt so machen willst musst du direkt nach dem Selbstaufruf ein return Schreiben damit die Funktion direkt danach herausspringt und nicht noch den Rest dieser verarbeitet.


Solche rekursiven Funktionen nutzt man meistens beim Durchlaufen aller Ordner eines Verzeichnisbaumes, aber hier ist das eher unangebracht und du bist mit einer Schleife besser bedient, aus der du bei Erfolg herausspringst.

Gruß jodel32