У меня есть несколько вспомогательных функций PowerShell в файле. Я хотел бы сделать их доступными для другого файла, который я пишу, но не загрязнять глобальную область.
Helpers.ps1
function global:Helper1
{
# this function pollutes the global scope
}
function Helper2
{
# this function is not visible to the Utility.ps1 file.
}
Utilities.ps1
&{
./Helpers.ps1
function global:Utility1
{
Helper1
}
function global:Utility2
{
Helper2
}
}
Я нашел этот вопрос: Как мне динамически создавать функции, доступные в родительской области? но в ответах обсуждается добавление функций в глобальную область. Что я действительно хочу сделать, так это сделать вспомогательные функции из одного файла PS1 доступными для вызывающего файла PS1, без загрязнения глобальной области с помощью помощников.
Я хочу избежать определения функций как переменных, что возможно с помощью Set-Variable и параметра -Scope. Самое близкое, что я видел (из связанного потока), - использование Set-Item в функции: drive.
Любая помощь будет принята с благодарностью!
Изменить: вот решение, расширенное из ответа Майка
Помощники. ps1
function Helper
{
}
Utilities.ps1
&{
function global:Utility
{
. ./Helpers.ps1
Helper1
}
}
Использование синтаксиса dot-source для загрузки Helpers.ps1 помещает его содержимое в область действия функции Utility. Ставим помощников. ps1 вне функции служебной программы приводит к тому, что она находится в области действия & {...}, но эта область заканчивается после определения функций.