raaja89
Goto Top

Powershell - Komplettes Skript aus einer Funktion stoppen und GUI offen lassen

Hallo Zusammen,

ich habe bereits unzählige Möglichkeiten durchgetestet und komme einfach nicht weiter face-confused
Für die Profis unter euch ist es sicherlich eine Kleinigkeit ^^

Ich habe ein Powershell Skript mit einer GUI erstellt und meine verschiedenen Vorgänge in Funktionen ausgelagert, damit ich auch künftig die Übersicht beibehalten kann..
Ich bin fast fertig, mir fehlt nur noch eine Sache: Ich möchte gerne das komplette Skript aus einer Funktion heraus stoppen, jedoch die GUI weiterhin offen lassen (für weitere Aktionen)..

Beispielskript:


function bla {
Write-Host "Ich bin jetzt in der Funktion"
Return
Write-Host "Mich sollte man nicht mehr sehen (1)"
}

Write-Host "Skript wird gestartet"
bla
Write-Host "Mich sollte man nicht mehr sehen (2)"


Das "Return" in der Funktion stoppt leider nur den aktuellen Vorgang (also die Funktion) und geht anschließend weiter in den normalen Skript-Teil.
Ein "exit" bringt wegen der GUI eine Fehlermeldung, wohingegen "[environment]::exit()" problemlos angenommen wird, aber die komplette GUI leider schließt.

Eine alternative Lösung wäre eine Variable in der Funktion zu erstellen und anschließend im normalen Skriptteil diese Variable abfragen, um hier das Skript mit einem "Return" stoppen zu können. Damit wird das komplette Skript gestoppt und die GUI bleibt offen..

Aber es müsste doch eigentlich eine elegantere Lösung dafür geben.. (?)


Vielen Dank im Voraus.

Schöne Grüße

Raaja

Content-Key: 283461

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

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: 114757
Lösung 114757 21.09.2015 aktualisiert um 19:31:37 Uhr
Goto Top
Moin,
erst gar keine Verarbeitungsschritte am Schluss einfügen sondern "alles" in den Funktionen Kapseln.
Nach dem Aufruf der GUI sollte kein Code mehr kommen.
Wenn es doch umbedingt sein muss gebe aus deiner Funktion z.B. ein false zurück und Frage das Resultat ab.
if(bla -ne $false){
     "hier geht's weiter"
}
Trotzdem musst du dann noch in einen Loop.

Die Konsole zu beenden hat immer das Resultat das die Form mit in den Äther geschickt wird ebenso wenn das Script selbst am Ende angelangt ist, da sie ja ein Child-Proces der Konsole geworden ist.
Außer du startest die Form in einem anderen Thread (einer zweiten Konsole / Stichwort Multithreading).
Gibt's hier im Forum einige Beispiele wenn du nach dem Stichwort und Powershell suchst.

Gruß jodel32
Mitglied: Raaja89
Raaja89 21.09.2015 um 19:33:15 Uhr
Goto Top
Vielen Dank für die Erklärung face-smile