Я работаю со скриптом powershell, который автоматизирует некоторые длительные задачи развертывания.
Я использую
$scripts = Get-ChildItem -r -Path server-deploy | select -expand fullname
, чтобы получить массив, который выглядит следующим образом
D:\BitBucket\CI\serverdeploy\builder\server-deploy\install-builder-10.ps1
D:\BitBucket\CI\serverdeploy\builder\server-deploy\install-builder-20.ps1
D:\BitBucket\CI\serverdeploy\builder\server-deploy\install-builder-30.ps1
D:\BitBucket\CI\serverdeploy\builder\server-deploy\install-builder-40.ps1
D:\BitBucket\CI\serverdeploy\builder\server-deploy\install-builder-50.ps1
Я оставил некоторые «дыры» там, чтобы добавить дополнительные скриптыесли требования меняются на меня.Сценарии всегда будут называться «install-someword-int.ps1», а порядок определяется int.
Я знаю, что Get-ChildItem отсортировал их в правильном порядке, но я бы хотел бытьв состоянии создать функцию, которая всегда может их упорядочить, поэтому, если мне нужно добавить скрипт, например, install-builder-15.ps1, я знаю, что он будет работать после 10 и до 20. Будучи хорошим хранителем, я не по своей сутидоверьтесь Get-ChildItem, чтобы ВСЕГДА возвращать их в правильном порядке.
Я ищу правильный способ сортировки $ сценариев или использую некоторый цикл for для итерации массива, но всегда в правильномorder.
EDIT: @boxdog Использование файлов:
install-builder-10.ps1
install-builder-20.ps1
install-builder-30.ps1
install-builder-4.ps1
install-builder-5.ps1
, если я запускаю Sort-Object @{e={$_ -match ".*install-.*-(?<number>\d+).ps1"; $matches.number}}
, я вижу, что они в том же порядке.Я бы ожидал
install-builder-4.ps1
install-builder-5.ps1
install-builder-10.ps1
install-builder-20.ps1
install-builder-30.ps1