zamsi7
Goto Top

Powershell loop erzeugen

Hallo an alle,

hätte mal wieder eine Frage ^^

Ich wollte ein Script schreiben, welches sich immer wieder von selbst neu startet. Also quasi immer wieder am ende des Script in die erste Zeile springt.
Gibt es denn einen Befehl dafür?
Ich denke hier nicht an eine While oder if else Schleife.

Kann man dies in PS. So etwas wie GoTo?


z.B.


Write-Host "Hello"

Start-Sleep -Seconds 3

[Hier sollte wieder in die erste Zeile gesprungen werden]


Danke!!

LG Simon

Content-ID: 327949

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

Ausgedruckt am: 05.11.2024 um 15:11 Uhr

emeriks
emeriks 30.01.2017 aktualisiert um 11:33:23 Uhr
Goto Top
Hi,
Do...Loop ?
Wobei ein While..Wend auch nichts anderes ist.
http://www.computerperformance.co.uk/powershell/powershell_loops_do_whi ...

E.
colinardo
Lösung colinardo 30.01.2017 aktualisiert um 13:34:53 Uhr
Goto Top
Servus Simon,
GOTO ist ganz schlechter "Spaghetti-Code" Programmierstil und gehört in die Zeiten der Programmiersprachenanfänge (Batch/Basic) davon solltest du dich in einer modernen Scriptsprache schnell verabschieden, denn es gibt weit bessere Alternativen um bestehende Codekonstrukte erneut auszuführen wie z.B. Funktionen und Scriptblocks.

Du hast in Powershell verschiedene Möglichkeiten das besser zu machen:

back-to-topWhile /Do While / Do Loop etc.
while($true){
    write-host "Hello"  
    sleep 3
}
Wobei du jederzeit mit der break Anweisung den Endless-Loop verlassen kannst.

back-to-topErneuter Aufruf des Scripts
In $PSCommandPath steht dann der Scriptname (funktioniert natürlich nur wenn du das Script vorher abspeicherst)
Achtung: Fork-Bomb Gefahr bei langer Laufzeit. Hier wenn dann mit start-process arbeiten ohne auf das Ende zu warten.
write-host "Hello"  
sleep 3
. $PSCommandPath
back-to-topFunktion / Scriptblock der sich selber erneut aufruft
$code = {
    write-host "Hello"  
    sleep 3
    . $code
}
. $code

Siehe auch
http://windowsitpro.com/systems-management/powershell-goodbye-goto

Grüße Uwe
Tungdal
Tungdal 30.01.2017 um 13:18:29 Uhr
Goto Top
Hallo,
kurze Frage @colinardo:
Würde ein erneuter Aufruf des Skripts nicht sowas wie eine Forkbomb erzeugen, oder verstehe ich da was falsch?

Gruß, Max
colinardo
colinardo 30.01.2017 aktualisiert um 13:33:12 Uhr
Goto Top
Zitat von @Tungdal:
Würde ein erneuter Aufruf des Skripts nicht sowas wie eine Forkbomb erzeugen, oder verstehe ich da was falsch?
Wenn man es so aufruft wie oben so das das Skript auf das Ende wartet ja. Man kann es aber auch per start-process neu starten ohne auf das Ende zu warten dann passiert das nicht
start powershell -Arg $PSCommandPath -NoNewWindow
zamsi7
zamsi7 30.01.2017 um 16:18:53 Uhr
Goto Top
Vielen Danke für eure Antworten!!

Habe es währenddessen mit 2 Scripts versucht, welche sich gegenseitig immer neu ausführen ^^
Hat auch geklappt.. ist halt leider nicht so sauber. War auch nur mal ein Test :D

Habe es nun mit der While- Schleife gelöst. Denke das ist die sauberste face-smile

Die Lösung mit den Scriptblock finde ich auch sehr hilfreich.

Vielen Dank dafür!

LG Simon
emeriks
emeriks 30.01.2017 um 16:47:33 Uhr
Goto Top
Keine Ursache