Добавить функцию PowerShell в родительскую область

У меня есть несколько вспомогательных функций 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 вне функции служебной программы приводит к тому, что она находится в области действия & {...}, но эта область заканчивается после определения функций.

5
задан Community 23 May 2017 в 12:17
поделиться