Ich schreibe ein Batch-Skript in PowerShell v1, das für die Ausführung geplant ist, sagen wir einmal pro Minute. Zwangsläufig wird es eine Zeit kommen, wenn der Job mehr als 1 Minute benötigt, um zu vervollständigen, und jetzt haben wir zwei Instanzen des Skripts ausgeführt, und dann möglicherweise 3, etc ...Sicherstellen, dass nur 1 Instanz des PowerShell-Skripts zu einer bestimmten Zeit ausgeführt wird
Ich möchte dies vermeiden, indem Sie das Skript haben Überprüfen Sie selbst, ob bereits eine Instanz von sich selbst ausgeführt wird, und wenn dies der Fall ist, wird das Skript beendet.
Ich habe dies in anderen Sprachen unter Linux getan, aber nie unter Windows mit PowerShell.
Zum Beispiel in PHP kann ich so etwas wie:
exec("ps auxwww|grep mybatchscript.php|grep -v grep", $output);
if($output){exit;}
Gibt es etwas wie dies in Powershell v1? So etwas bin ich noch nicht begegnet.
Von diesen allgemeinen Mustern, die am meisten Sinn macht, wenn ein PowerShell-Skript häufig ausgeführt wird?
- Sperrdatei
- OS-Taskplaner
- Endlosschleife mit einem Schlafintervall
Wie planen Sie es ersetzen? Wenn Sie den Taskplaner verwenden, haben Sie eine Option unter Einstellungen: "Wenn der Task bereits ausgeführt wird, gilt die folgende Regel: Starten Sie kein neues Instace". –
Nun, das ist einfach. Ich kann Taskplaner verwenden oder eine Sperrdatei erstellen, die völlig unnötig erscheint, wenn das Betriebssystem damit umgehen kann. – Slinky