如何为以前导入的模块提供PowerShell WorkFlow访问权限

时间:2014-09-04 10:24:05

标签: powershell workflow

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

目前在WorkFlow中我不得不使用:

Inline
{
   Import-Module My.Modules
   Execute-MyModulesCustomFunctionFromImportedModules -SomeVariable $Using:SomeVariableValue
}

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

1 个答案:

答案 0 :(得分:5)

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

  

一般工作流程设计策略

     

了解工作流程的全部内容非常重要   被翻译成WF自己的语言,只能理解   活动。除了一些命令,微软有   提供了与大多数核心PowerShell相对应的WF活动   的cmdlet。这意味着PowerShell的大多数内置命令 - 那些   在任何模块导入之前可用 - 工作正常。

     

但是,加载模块不是这种情况。而且,因为每一个   工作流活动在一个独立的空间中执行,你甚至不能   在工作流程中单独使用Import-Module。你基本上导入一个   模块,但是当你试图运行任何一个时它会消失   模块的命令。

     

解决方案是将工作流视为高级任务   协调机制。你可能有很多   InlineScript {}在工作流内阻塞,因为它们的内容   块在单个PowerShell会话中作为单个单元执行。   在InlineScript {}中,您可以导入模块然后运行它   命令。您包含的每个InlineScript {}块都会运行   独立,所以把每个人都想象成一个独立的脚本文件   排序:每个人都应该执行任何必要的设置任务   成功运行。