I’m not sure whether to call this a need for multi-threading, job-based, or async, but basically I have a Powershell script function that takes several parameters and I need to call it several times with different parameters and have these run in parallel.
Currently, I call the function like this:
Execute "param1" "param2" "param3" "param4"
How can I call this multiple times without waiting for each call to Execute return to the caller?
Currently I’m running v2.0 but I can update if necessary
EDIT: here’s what I have so far, which doesn’t work:
$cmd = {
param($vmxFilePath,$machineName,$username,$password,$scriptTpath,$scriptFile,$uacDismissScript,$snapshotName)
Execute $vmxFilePath $machineName $username $password $scriptTpath $scriptFile $uacDismissScript $snapshotName
}
Start-Job -ScriptBlock $cmd -ArgumentList $vmxFilePath, $machineName, $username $password, $scriptTpath, $scriptFile, $uacDismissScript, $snapshotName
I get an error:
cannot convert ‘system.object[]’ to the type ‘system.management.automation.scriptblock’ required by parameter ‘initializationscript’. specified method is not supported
EDIT2: I’ve modified my script but I still get the error mentioned above. Here’s my mod:
$cmd = {
param($vmxFilePath,$machineName,$username,$password,$scriptTpath,$scriptFile,$uacDismissScript,$snapshotName)
Execute $vmxFilePath $machineName $username $password $scriptTpath $scriptFile $uacDismissScript $snapshotName
}
Start-Job -ScriptBlock $cmd -ArgumentList $vmxFilePath, $machineName, $username $password, $scriptTpath, $scriptFile, $uacDismissScript, $snapshotName
No update necessary for this. Define a script block and use
Start-Jobto run the script block as many times as necessary. Example:The script block takes 2 parameters
$aand$bwhich are passed by the-ArgumentListoption. In the example above, the assignments are$_→$aand$foo→$b.$foois just an example for a configurable, but static parameter.Run
Get-Job | Remove-Jobat some point to remove the finished jobs from the queue (orGet-Job | % { Receive-Job $_.Id; Remove-Job $_.Id }if you want to retrieve the output).