Насколько вы знакомы с параллельным программированием в целом? Вы слышали и использовали концепцию взаимного исключения ? В целом, концепция заключается в использовании какого-либо механизма обмена сообщениями / блокировки для защиты общего ресурса между различными параллельными потоками.
В вашем случае вы делаете разделительные линии самими сценариями - что, я думаю, может сделать это намного проще, чем большинство методов, описанных в этой статье в Википедии. Будет ли этот простой шаблон работать на то, что вы ищете?
- Определить папку в локальной файловой системе. Это местоположение будет известно всем сценариям (параметр по умолчанию).
- Перед запуском любого из сценариев убедитесь, что все файлы в этом каталоге удалены.
- Для каждого скрипта, как самого последнего шага их выполнения, они должны записать файл в общий каталог с именем своего скрипта в качестве имени файла. Таким образом, script1.ps1 создаст файл script1, например.
- Любой скрипт, имеющий зависимость от другого скрипта, будет определять эти зависимости в терминах имен файлов скриптов. Если script3 зависит от script1 и script2, это будет определено как параметр зависимости в script3.
- Все сценарии с зависимостями будут запускать функцию, которая проверяет, существуют ли файлы для сценариев, от которых она зависит. Если они есть, он продолжает выполнение сценария, в противном случае он приостанавливается, пока они не будут завершены.
- Все сценарии запускаются одновременно основным сценарием / командным файлом. Все сценарии выполняются как задания PowerShell, поэтому ОС будет выполнять их выполнение параллельно. Большинство сценариев запустятся, увидят, что они имеют зависимости, и затем терпеливо ждут их разрешения, прежде чем продолжать фактическое выполнение тела сценария.
Хорошая новость заключается в том, что это позволит гибко изменять зависимости. Каждый сценарий записывает файл, не делая предположений о том, ждет ли их кто-то еще или нет. Изменение зависимости конкретного сценария будет простым однострочным изменением или изменением входного параметра.
Хотя это определенно не идеальное решение. Например, что произойдет в случае сбоя сценария (или ваш сценарий может завершиться несколькими путями кода, но вы забыли записать файл в один из них)? Это может привести к тупиковой ситуации, когда никакие зависимые сценарии не будут запущены. Другая плохая вещь - это занятое ожидание сна или вращения в ожидании создания нужных файлов - это можно исправить, применив Основанный на событиях подход, при котором ОС следит за изменением каталога.
Надеюсь, это поможет, а не весь мусор.