Ich habe ein PowerShell-Skript erstellt , das alle von mir heruntergeladenen E-Books in ein vorbestimmtes Verzeichnis kopiert, das von meinem E-Book-Manager regelmäßig gescannt und meiner Bibliothek hinzugefügt wird. Das Skript wird sofort nach jedem Download ausgeführt.
Das Problem ist, dass der E-Book-Manager beim gleichzeitigen oder zeitgleichen Herunterladen mehrerer Bücher abstürzt und nicht mehr reagiert.
Aus diesem Grund möchte ich das Kopieren mithilfe von PowerShell-Jobs in die Warteschlange stellen, kann jedoch keine einzelne Warteschlange (einzelne Parallelität) erstellen, die für jeden nachfolgenden Job auf den Abschluss aller älteren Jobs wartet.
Das heißt, ich möchte, dass das Skript einen Auftrag erstellt (nennen wir ihn "Buchauftrag"), der regelmäßig die Warteschlange für die Ausführung von Buchaufträgen überprüft, um festzustellen, ob alle älteren Buchaufträge abgeschlossen sind, bevor sie ausgeführt werden. Wenn es abgeschlossen ist, sollte ein Buchjob erklären, dass er auf eine Weise beendet wurde, die von jüngeren Buchjobs erkannt werden kann.
Weiß jemand, wie ich das machen kann? Ich habe hier eine ähnliche Frage gesehen, die ich gerade betrachte: Powershell-Hintergrundaufgaben , in meinem Fall führe ich das Skript jedoch mehrfach aus (nach jedem neuen Download).
quelle
Antworten:
Mein Gedanke ist, eine Warteschlange durch Erstellen einer Sperrdatei pro neuer Instanz Ihres Skripts einzurichten. Bei der Ausführung des Skripts wird ein Verzeichnis überprüft, das der Verfolgung der Warteschlange auf vorhandene Instanzen des Skripts dient. Wenn es keine gibt, fügt sich das Skript in die Warteschlange ein, führt eine Aktion aus (führt Ihren Code aus) und bereinigt dann seine Sperre. Wenn Sperren vorhanden sind, wird am Ende der Warteschlange eine neue hinzugefügt, und die Instanz prüft endlos, bis sie sich am Anfang der Warteschlange befindet.
Auf diese Weise können Sie dasselbe Skript mehrmals ausführen, wobei sich alle einzeln durch Überprüfen der extern verfügbaren Warteschlange verhalten.
Die Sperrdateien sind wie folgt aufgebaut: Index, Trennzeichen ("_"), Prozess-ID.
Unten sehen Sie ein fiktives Timeline-Beispiel, in dem Sie drei Dateien heruntergeladen haben (ich habe zufällige PIDs ausgewählt).
do/until
und weiter nachsehen, bis wir an erster Stelle stehen.Diese Lösung ist nicht kugelsicher, funktioniert jedoch je nach Maßstab.
quelle