Invoke-BluGenieParallel



Invoke-BluGenieParallel

SYNOPSIS

Function to control parallel processing using runspaces

SYNTAX

Invoke-BluGenieParallel [[-ScriptBlock] <ScriptBlock>] [-InputObject <PSObject>] [-Parameter <PSObject>] [-ImportVariables] [-ImportModules] [-ImportFunctions] [-Throttle <Int32>] [-SleepTimer <Int32>] 
[-RunspaceTimeout <Int32>] [-NoCloseOnTimeout] [-MaxQueue <Int32>] [-AppendLog] [-LogFile <String>] [-Quiet] [-Walkthrough] [<CommonParameters>]

Invoke-BluGenieParallel [-ScriptFile <Object>] [-InputObject <PSObject>] [-Parameter <PSObject>] [-ImportVariables] [-ImportModules] [-ImportFunctions] [-Throttle <Int32>] [-SleepTimer <Int32>] [-RunspaceTimeout 
<Int32>] [-NoCloseOnTimeout] [-MaxQueue <Int32>] [-AppendLog] [-LogFile <String>] [-Quiet] [-Walkthrough] [<CommonParameters>]

DESCRIPTION

Function to control parallel processing using runspaces

Note that each runspace will not have access to variables and commands loaded in your session or in other runspaces by default.
This behaviour can be changed with parameters.

EXAMPLES

EXAMPLE 1

Each example uses Test-ForPacs.ps1 which includes the following code:
param($computer)

   if(test-connection $computer -count 1 -quiet -BufferSize 16){
       $object = [pscustomobject] @{
           Computer=$computer;
           Available=1;
           Kodak=$(
               if((test-path "\\$computer\c$\users\public\desktop\Kodak Direct View Pacs.url") -or (test-path "\\$computer\c$\documents and settings\all users\desktop\Kodak Direct View Pacs.url") ){"1"}else{"0"}
           )
       }
   }
   else{
       $object = [pscustomobject] @{
           Computer=$computer;
           Available=0;
           Kodak="NA"
       }
   }

   $object

EXAMPLE 2

Invoke-BluGenieParallel -scriptfile C:\public\Test-ForPacs.ps1 -inputobject $(get-content C:\pcs.txt) -runspaceTimeout 10 -throttle 10
Pulls list of PCs from C:\pcs.txt,
   Runs Test-ForPacs against each
   If any query takes longer than 10 seconds, it is disposed
   Only run 10 threads at a time

EXAMPLE 3

Invoke-BluGenieParallel -scriptfile C:\public\Test-ForPacs.ps1 -inputobject c-is-ts-91, c-is-ts-95
Runs against c-is-ts-91, c-is-ts-95 (-computername)
   Runs Test-ForPacs against each

EXAMPLE 4

$stuff = [pscustomobject] @{
ContentFile = "windows\system32\drivers\etc\hosts"
   Logfile = "C:\temp\log.txt"
}

$computers | Invoke-BluGenieParallel -parameter $stuff {
   $contentFile = join-path "\\$_\c$" $parameter.contentfile
   Get-Content $contentFile |
       set-content $parameter.logfile
}

This example uses the parameter argument.  This parameter is a single object.  To pass multiple items into the script block, we create a custom object (using a PowerShell v3 language) with properties we want to pass in.

Inside the script block, $parameter is used to reference this parameter object.  This example sets a content file, gets content from that file, and sets it to a predefined log file.

EXAMPLE 5

$test = 5
1..2 | Invoke-BluGenieParallel -ImportVariables {$_ * $test}

Add variables from the current session to the session state.  Without -ImportVariables $Test would not be accessible

EXAMPLE 6

$test = 5
1..2 | Invoke-BluGenieParallel {$_ * $Using:test}

Reference a variable from the current session with the $Using:<Variable> syntax.  Requires PowerShell 3 or later. Note that -ImportVariables parameter is no longer necessary.

PARAMETERS

ScriptBlock

-ScriptBlock <ScriptBlock>
   Scriptblock to run against all computers.
   
   You may use $Using:<Variable> language in PowerShell 3 and later.
   
       The parameter block is added for you, allowing behaviour similar to foreach-object:
           Refer to the input object as $_.
           Refer to the parameter parameter as $parameter
   
   <Type>String<Type>
   
   Required?                    false
   Position?                    1
   Default value                
   Accept pipeline input?       false
   Accept wildcard characters?  false

ScriptFile

-ScriptFile <Object>
   File to run against all input objects.  Must include parameter to take in the input object, or use $args.  Optionally, include parameter to take in parameter.  Example: C:\script.ps1
   
   <Type>String<Type>
   
   Required?                    false
   Position?                    named
   Default value                
   Accept pipeline input?       false
   Accept wildcard characters?  false

InputObject

-InputObject <PSObject>
   Run script against these specified objects.
   
   <Type>String<Type>
   
   Required?                    false
   Position?                    named
   Default value                
   Accept pipeline input?       true (ByValue)
   Accept wildcard characters?  false

Parameter

-Parameter <PSObject>
   This object is passed to every script block.  You can use it to pass information to the script block; for example, the path to a logging folder
   
       Reference this object as $parameter if using the scriptblock parameterset.
   
   <Type>String<Type>
   
   Required?                    false
   Position?                    named
   Default value                
   Accept pipeline input?       false
   Accept wildcard characters?  false

ImportVariables

-ImportVariables [<SwitchParameter>]
   If specified, get user session variables and add them to the initial session state
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

ImportModules

-ImportModules [<SwitchParameter>]
   If specified, get loaded modules and pssnapins, add them to the initial session state
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

ImportFunctions

-ImportFunctions [<SwitchParameter>]
   If specified, get loaded functions, and add them to the initial session state
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

Throttle

-Throttle <Int32>
   Maximum number of threads to run at a single time.
   
   <Type>Int<Type>
   
   Required?                    false
   Position?                    named
   Default value                50
   Accept pipeline input?       false
   Accept wildcard characters?  false

SleepTimer

-SleepTimer <Int32>
   Milliseconds to sleep after checking for completed runspaces and in a few other spots.  I would not recommend dropping below 200 or increasing above 500
   
   <Type>Int<Type>
   
   Required?                    false
   Position?                    named
   Default value                1000
   Accept pipeline input?       false
   Accept wildcard characters?  false

RunspaceTimeout

-RunspaceTimeout <Int32>
   Maximum time in seconds a single thread can run.  If execution of your code takes longer than this, it is disposed.  Default: 0 (seconds)
   
   WARNING:  Using this parameter requires that maxQueue be set to throttle (it will be by default) for accurate timing.  Details here:
   http://gallery.technet.microsoft.com/Run-Parallel-Parallel-377fd430
   
   <Type>Int<Type>
   
   Required?                    false
   Position?                    named
   Default value                0
   Accept pipeline input?       false
   Accept wildcard characters?  false

NoCloseOnTimeout

-NoCloseOnTimeout [<SwitchParameter>]
   Do not dispose of timed out tasks or attempt to close the runspace if threads have timed out. This will prevent the script from hanging in certain situations where threads become non-responsive, at the 
   expense of leaking memory within the PowerShell host.
   
   <Type>Int<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

MaxQueue

-MaxQueue <Int32>
   Maximum number of powershell instances to add to runspace pool.  If this is higher than $throttle, $timeout will be inaccurate
   
   If this is equal or less than throttle, there will be a performance impact
   
   The default value is $throttle times 3, if $runspaceTimeout is not specified
   The default value is $throttle, if $runspaceTimeout is specified
   
   <Type>Int<Type>
   
   Required?                    false
   Position?                    named
   Default value                0
   Accept pipeline input?       false
   Accept wildcard characters?  false

AppendLog

-AppendLog [<SwitchParameter>]
   Append to existing log
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

LogFile

-LogFile <String>
   Path to a file where we can log results, including run time for each thread, whether it completes, completes with errors, or times out.
   
   <Type>String<Type>
   
   Required?                    false
   Position?                    named
   Default value                
   Accept pipeline input?       false
   Accept wildcard characters?  false

Quiet

-Quiet [<SwitchParameter>]
   Disable progress bar
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

Walkthrough

-Walkthrough [<SwitchParameter>]
   An automated process to walk through the current function and all the parameters
   
   <Type>SwitchParameter<Type>
   
   Required?                    false
   Position?                    named
   Default value                False
   Accept pipeline input?       false
   Accept wildcard characters?  false

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

Last updated