是否有方法从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 ...