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"