我正在尝试将PowerShell工作流引入一些现有脚本,以利用并行运行功能。
目前在WorkFlow中我不得不使用:
Inline
{
Import-Module My.Modules
Execute-MyModulesCustomFunctionFromImportedModules -SomeVariable $Using:SomeVariableValue
}
否则我收到错误,指出它无法找到自定义函数。必须有更好的方法来做到这一点吗?
答案 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 {}块都会运行 独立,所以把每个人都想象成一个独立的脚本文件 排序:每个人都应该执行任何必要的设置任务 成功运行。