我在文件中有一些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/