Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to give PowerShell WorkFlow access to previously imported modules

I'm trying to introduce PowerShell workflow into some existing scripts to take advantage of the parallel running capability.

Currently in the WorkFlow I'm having to use:

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

Otherwise I get the error stating it can't find the custom function. There must be a better way to do this?

like image 902
Chris Avatar asked Sep 04 '14 10:09

Chris


People also ask

What are you doing when you use the import-module cmdlet?

Description. The Import-Module cmdlet adds one or more modules to the current session. Starting in PowerShell 3.0, installed modules are automatically imported to the session when you use any commands or providers in the module. However, you can still use the Import-Module command to import a module.

Where are imported PowerShell modules stored?

By default, on Windows 10 and higher, that location is $HOME\Documents\PowerShell\Modules . On Linux or Mac, the CurrentUser location is $HOME/. local/share/powershell/Modules .

When authoring PowerShell workflows What is the name of the workflow activity that enables you to run PowerShell commands?

Long description. PowerShell Workflow brings the benefits of the Windows Workflow Foundation to PowerShell and enables you to write and run workflows. PowerShell Workflow was introduced in PowerShell 3.0 and the module is available up to PowerShell 5.1.


1 Answers

The article at http://www.powershellmagazine.com/2012/11/14/powershell-workflows/ confirms that having to import modules and then use them is just how it works - MS gets around this by creating WF activities for all its common PowerShell commands:

General workflow design strategy

It’s important to understand that the entire contents of the workflow get translated into WF’s own language, which only understands activities. With the exception of a few commands, Microsoft has provided WF activities that correspond to most of the core PowerShell cmdlets. That means most of PowerShell’s built-in commands—the ones available before any modules have been imported—work fine.

That isn’t the case with add-in modules, though. Further, because each workflow activity executes in a self-contained space, you can’t even use Import-Module by itself in a workflow. You’d basically import a module, but it would then go away by the time you tried to run any of the module’s commands.

The solution is to think of a workflow as a high-level task coordination mechanism. You’re likely to have a number of InlineScript{} blocks within a workflow because the contents of those blocks execute as a single unit, in a single PowerShell session. Within an InlineScript{}, you can import a module and then run its commands. Each InlineScript{} block that you include runs independently, so think of each one as a standalone script file of sorts: Each should perform whatever setup tasks are necessary for it to run successfully.

like image 52
Chris Avatar answered Sep 23 '22 21:09

Chris