我在文件中有一些PowerShell辅助函数。我想使它们可用于我正在编写的另一个文件的作用域,但不污染全局作用域。

Helpers.ps1

function global:Helper1
{
    # this function pollutes the global scope
}
function Helper2
{
    # this function is not visible to the Utility.ps1 file.
}

实用程序.ps1
&{
    ./Helpers.ps1
    function global:Utility1
    {
        Helper1
    }
    function global:Utility2
    {
        Helper2
    }
}

我发现了这个问题:
How do I dynamically create functions that are accessible in a parent scope?,但是答案讨论将函数添加到全局范围。我真正想做的是使一个PS1文件中的Helper函数对调用PS1文件可用,而不会用helper污染全局范围。

我想避免将函数定义为变量,这可以通过Set-Variable和-Scope参数来实现。我所看到的(从链接的线程中)最近的函数是在驱动器中使用Set-Item。

任何帮助,将不胜感激!

编辑:这是从Mike的回答扩展的解决方案

Helpers.ps1
function Helper
{
}

实用程序.ps1
&{
    function global:Utility
    {
        . ./Helpers.ps1
        Helper1
    }
}

使用点源语法加载Helpers.ps1时,会将其内容放在Utility函数的范围内。将Helpers.ps1放在Utility函数之外会导致它在&{...}范围内,但是一旦定义了这些功能,该范围便会终止。

最佳答案

如果在函数中对.ps1文件进行点源化,则除非函数本身是点源的,否则ps1文件中的定义不是全局的。

关于powershell - 将PowerShell函数添加到父作用域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5792746/

10-13 07:46
查看更多