是否有方法从PowerShell中的调用模块作用域访问函数?
我有两个是否有方法从PowerShell中的调用模块作用域访问函数?,powershell,Powershell,我有两个.ps1文件。一个叫另一个。我希望将函数名传递给另一个,以便另一个可以调用在其文件中定义的函数(依赖项注入)。似乎在调用另一个.ps1文件时,它没有调用方模块作用域中的函数视图 这样做的原因是,我可以生成一些包含函数的powershell实例。但是,由于这些是单独的实例,它们将无法访问调用者代码,因此我需要重新生成函数,并通过说明希望导出哪些函数并将这些函数转换为脚本字符串,将它们输入到新流程中,如下所示: Param( [string]$Command, [Array]$I
.ps1
文件。一个叫另一个。我希望将函数名传递给另一个,以便另一个可以调用在其文件中定义的函数(依赖项注入)。似乎在调用另一个.ps1
文件时,它没有调用方模块作用域中的函数视图
这样做的原因是,我可以生成一些包含函数的powershell实例。但是,由于这些是单独的实例,它们将无法访问调用者代码,因此我需要重新生成函数,并通过说明希望导出哪些函数并将这些函数转换为脚本字符串,将它们输入到新流程中,如下所示:
Param(
[string]$Command,
[Array]$IncludeFunction = @()
)
Begin{
$Command += "`r`n"
Foreach ($functionName in $IncludeFunction)
{
$Command += "function $functionName() { ${function:$functionName} }`r`n"
}
}
我注意到可以访问调用模块作用域的变量,因此我想知道这是否也适用于函数。在脚本中包含函数的快捷方式是将函数写入第二个脚本,并在脚本中使用函数: 如果您想为多个脚本提供函数库,最好将函数包装在一个脚本中 然后,您可以分发库,人们可以像导入任何其他模块一样导入库:
# script1.ps1
Import-Module library
FunctionA ...
问题不是它们不可用,而是因为
${function:$functionName}
不起作用。我必须使用(get命令$functionName).Definition
。不知道为什么会这样。有没有关于简单点源另一个文件的问题<代码>'C:\path\to\other.ps1'是的,刚刚发现了,但结果证明不需要它。似乎${function:$functionName}
不起作用。我必须使用(get命令$functionName).Definition
。o、 当管道传输到.ps1
文件时,暗示了OIs点源?@Adrian No.这是完全不同的。
# library.psm1
function FunctionA {
...
}
function FunctionB {
...
}
Export-ModuleMember -Function *
# script1.ps1
Import-Module library
FunctionA ...