Powershell: Включить еще один script, который включает?
Я хочу облегчить себе жизнь при создании сценариев. Я смотрю небольшую структуру, в которой будет иерархия включенных файлов. Проблема заключается в точечном поиске ps1 script, у которого уже есть другие файлы с точками, которые копируют область в исходных сценариях вызова.
Это выглядит так:
\Config\loadvariables.ps1
$var = "shpc0001"
\Config\config.ps1
. '.\loadvariables.ps1'
\Test.ps1
. '.\config\config.ps1'
echo $var
Проблема заключается в том, что test.ps1
пытается загрузить loadvariables.ps1
, поскольку он находится рядом с test.ps1
script.
Как я могу это решить?
Ответы
Ответ 1
Самый простой способ управления коллекцией скриптов, имеющих взаимозависимости, - это преобразовать их в модули. Эта функция доступна только в версии 2.0, но позволяет отделить группу скриптов к независимым компонентам с объявленными зависимостями.
Вот ссылка на учебное пособие по созданию и запуску модулей
Ответ 2
Как сказал Джаред, модули - это путь. Но поскольку вы даже можете использовать dot-source внутри своих модулей, лучше всего использовать полные пути (которые все еще можно вычислить во время выполнения).
## Inside modules, you can refer to the module location like so
. "$PSScriptRoot\loadvariables.ps1"
## Outside a module, you can do this
$ScriptRoot = Split-Path $MyInvocation.MyCommand.Path
. "$ScriptRoot\loadvariables.ps1"