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-Key: 327949

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: emeriks
emeriks Jan 30, 2017 updated at 10:33:23 (UTC)
Goto Top
Hi,
Do...Loop ?
Wobei ein While..Wend auch nichts anderes ist.
http://www.computerperformance.co.uk/powershell/powershell_loops_do_whi ...

E.
Member: colinardo
Solution colinardo Jan 30, 2017 updated at 12:34:53 (UTC)
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
Member: Tungdal
Tungdal Jan 30, 2017 at 12:18:29 (UTC)
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
Member: colinardo
colinardo Jan 30, 2017 updated at 12:33:12 (UTC)
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
Member: zamsi7
zamsi7 Jan 30, 2017 at 15:18:53 (UTC)
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
Member: emeriks
emeriks Jan 30, 2017 at 15:47:33 (UTC)
Goto Top
Keine Ursache