I have the following powershell script
$list = invoke-sqlcmd \'exec getOneMillionRows\' -Server...
$list | % {
GetData $_ > $_.txt
ZipTheFile $_.t
Background jobs is the answer. You can also throttle the jobs in the run queue using [System.Collection.Queue]. There is a blog post from PowerShell team on this topic: http://blogs.msdn.com/b/powershell/archive/2011/04/04/scaling-and-queuing-powershell-background-jobs.aspx
Using queuing method is probably the best answer to throttling background jobs.