Powershell: включить еще один скрипт, который включает? - PullRequest
12 голосов
/ 29 июля 2011

Я хочу сделать свою жизнь проще при создании сценариев.Я смотрю на небольшую структуру, которая будет иметь иерархию включаемых файлов.Проблема заключается в точечной выборке сценария ps1, в котором уже есть другие файлы, точечная выборка тормозит область действия в исходных вызывающих сценариях.Это выглядит так:

\ config \ loadvariables.ps1

$var = "shpc0001"

\ config \ config.ps1

. '.\loadvariables.ps1'

\ test.ps1

. '.\config\config.ps1'
echo $var

Проблема в том, что test.ps1 пытается загрузить loadvariables.ps1, поскольку он находится рядом со скриптом test.ps1.Как я могу решить это?

Ответы [ 2 ]

12 голосов
/ 29 июля 2011

Самый простой способ управления коллекцией скриптов, имеющих взаимозависимости, - преобразовать их в модули. Эта функция доступна только в 2.0, но она позволяет разделить группу сценариев на независимые компоненты с объявленными зависимостями.

Вот ссылка на руководство по настройке и запуску модулей

7 голосов
/ 29 июля 2011

Как сказал Джаред, модули - это путь. Но так как вы можете даже создавать точечные источники внутри своих модулей, лучше использовать полные пути (которые все еще могут быть вычислены во время выполнения), например так.

## Inside modules, you can refer to the module's location like so
. "$PSScriptRoot\loadvariables.ps1"

## Outside a module, you can do this
$ScriptRoot = Split-Path $MyInvocation.MyCommand.Path
. "$ScriptRoot\loadvariables.ps1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...