如何授予PowerShell WorkFlow对以前导入的模块的访问权限

Chr*_*ris 4 powershell workflow

我试图将PowerShell工作流引入一些现有脚本中,以利用并行运行功能。

当前在工作流程中,我必须使用:

Inline
{
   Import-Module My.Modules
   Execute-MyModulesCustomFunctionFromImportedModules -SomeVariable $Using:SomeVariableValue
}
Run Code Online (Sandbox Code Playgroud)

否则,我会收到错误消息,指出找不到自定义函数。必须有更好的方法来做到这一点?

Chr*_*ris 5

http://www.powershellmagazine.com/2012/11/14/powershell-workflows/上的文章证实了必须导入模块然后使用它们才是它的工作方式-MS通过为其所有模块创建WF活动来解决此问题常见的PowerShell命令:

通用工作流程设计策略

重要的是要理解工作流的全部内容都被翻译成WF自己的语言,这种语言只能理解活动。除了一些命令以外,Microsoft提供了与大多数核心PowerShell cmdlet对应的WF活动。这意味着PowerShell的大多数内置命令(在导入任何模块之前都可用)可以正常工作。

但是,附加模块不是这种情况。此外,由于每个工作流程活动都在一个独立的空间中执行,因此您甚至无法在工作流程中单独使用Import-Module。您基本上已经导入了一个模块,但是当您尝试运行该模块的任何命令时,它就会消失。

解决方案是将工作流视为高级任务协调机制。您可能在工作流中有许多InlineScript {}块,因为这些块的内容在单个PowerShell会话中作为单个单元执行。在InlineScript {}中,您可以导入模块,然后运行其命令。包含的每个InlineScript {}块都是独立运行的,因此可以将其视为各种独立的脚本文件:每个块都应执行成功运行所需的任何设置任务。