直接就写在一起啦 , 看得脑阔疼- #Runspace最大数
- $MaxRunspaces = 10
-
- #Runspace池
- $RunspacePool = [runspacefactory]::CreateRunspacePool(1, $MaxRunspaces)
- $RunspacePool.Open()
-
- #任务
- $Worker = {
- param($Filename)
- if(test-path $Filename){
- $all = gc $Filename
- foreach($o in $all) { [console]::writeline($o)}
- $rt=0
- }else{
- $rt=-1
- }
- $rt
- }
-
- $Filenames = @("file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt", "file6.txt", "file7.txt", "file8.txt", "file9.txt", "file10.txt", "file11.txt")
-
- $jobs = @()
-
- #添加并执行任务
- foreach ($File in $Filenames) {
- $ps = [Powershell]::Create()
- $job = $ps.AddScript($Worker).AddArgument($File)
- $job.RunspacePool = $RunspacePool
- $jobs += New-Object PSObject -Property @{
- Job = $job
- PowerShell = $ps
- Result = $job.BeginInvoke()
- }
- }
-
- #判断任务是否完成
- do{
- Start-Sleep -Milliseconds 500
- $c = ($jobs | Where {$_.Result.IsCompleted -ne $true}).Count
- Write-Host ("未完成任务数" + $c) -ForegroundColor Green
- }while($c -gt 0)
-
- #获取返回结果并释放资源
- $i=1;foreach($j in $jobs){
- $r = $j.Job.EndInvoke($j.Result)
- write-host "任务 $i 返回值 : $r" -ForegroundColor Yellow
- $j.PowerShell.Dispose()
- $i+=1
- }
-
- cmd /c pause
复制代码 没啥特别需求可以用多进程的start-job |