2017-04-10 19 views
6

我想触发一个PowerShell工作流程,它应该同时旋转10个线程。我正在使用PS版本4.代码 -如何增加虚拟机上的cuncurrent powershell实例数量?

Workflow CreateVMs 
{ 
    $i = 0 
    #somecodehere... 
    foreach -parallel -throttlelimit 10($i in 0..30) 
    { 
     #somemorecodehere... 
     # INVOKING BATCH FILE USING POWERSHELL 
    } 
} 

我在我的内联脚本中使用powershell调用批处理文件。我在任务管理器观察到的是,只有5个线程是活跃在时间

enter image description here

可能成为下一个线程获得的回升只是五个一工程已完成。我从来没有看到超过5 ps的实例。然而,当我检查每个用户允许的PS会话是远远超过5

enter image description here

我怎样才能在一个PS工作流程分拆PS的10个线程并行。 我在这里错过了什么?

+1

只要并行活动的数量未超过节流限制,Workflow Foundation将自行管理线程/活动池,您无法强制其“加快速度” –

+0

在我的情况下它甚至没有达到油门限制。 – Atf

+0

不确定这是否适用于您,但您是否考虑过使用Start-Job cmdlet来完成您正在尝试执行的操作? https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/start-job –

回答

1

考虑下面的示例脚本:

Workflow Test-Workflow 
{ 
    foreach -Parallel -ThrottleLimit 10 ($Number in 1..20) 
    { 
     $RandomSeconds = Get-Random -Minimum 10 -Maximum 60 

     InlineScript 
     { 
      $String = '{0:s}: Starting number {1:D2} for {2:D2} seconds' -f (Get-Date),$Using:Number,$Using:RandomSeconds 
      Write-Host -Object $String 
     } 

     Start-Sleep -Seconds $RandomSeconds 

     InlineScript 
     { 
      $String = '{0:s}: Stopping number {1:D2} after {2:D2} seconds' -f (Get-Date),$Using:Number,$Using:RandomSeconds 
      Write-Host -Object $String 
     } 
    } 
} 
Test-Workflow 

您将得到类似以下的输出:

2017-11-28T13:27:34: Starting number 09 for 25 seconds 
2017-11-28T13:27:34: Starting number 10 for 36 seconds 
2017-11-28T13:27:34: Starting number 08 for 53 seconds 
2017-11-28T13:27:35: Starting number 06 for 17 seconds 
2017-11-28T13:27:35: Starting number 07 for 28 seconds 
2017-11-28T13:27:35: Starting number 05 for 33 seconds 
2017-11-28T13:27:35: Starting number 04 for 49 seconds 
2017-11-28T13:27:35: Starting number 02 for 18 seconds 
2017-11-28T13:27:35: Starting number 03 for 47 seconds 
2017-11-28T13:27:35: Starting number 01 for 45 seconds 
2017-11-28T13:27:52: Stopping number 06 after 17 seconds 
2017-11-28T13:27:55: Starting number 11 for 49 seconds 
2017-11-28T13:27:55: Stopping number 02 after 18 seconds 
2017-11-28T13:27:55: Starting number 12 for 55 seconds 
2017-11-28T13:28:00: Stopping number 09 after 25 seconds 
2017-11-28T13:28:00: Starting number 13 for 37 seconds 
2017-11-28T13:28:03: Stopping number 07 after 28 seconds 
2017-11-28T13:28:03: Starting number 14 for 46 seconds 
2017-11-28T13:28:08: Stopping number 05 after 33 seconds 
2017-11-28T13:28:08: Starting number 15 for 48 seconds 
2017-11-28T13:28:11: Stopping number 10 after 36 seconds 
2017-11-28T13:28:11: Starting number 16 for 57 seconds 
2017-11-28T13:28:21: Stopping number 01 after 45 seconds 
2017-11-28T13:28:21: Starting number 17 for 22 seconds 
2017-11-28T13:28:22: Stopping number 03 after 47 seconds 
2017-11-28T13:28:22: Starting number 18 for 39 seconds 
2017-11-28T13:28:24: Stopping number 04 after 49 seconds 
2017-11-28T13:28:24: Starting number 19 for 34 seconds 
2017-11-28T13:28:28: Stopping number 08 after 53 seconds 
2017-11-28T13:28:28: Starting number 20 for 58 seconds 
2017-11-28T13:28:37: Stopping number 13 after 37 seconds 
2017-11-28T13:28:43: Stopping number 17 after 22 seconds 
2017-11-28T13:28:44: Stopping number 11 after 49 seconds 
2017-11-28T13:28:49: Stopping number 14 after 46 seconds 
2017-11-28T13:28:50: Stopping number 12 after 55 seconds 
2017-11-28T13:28:56: Stopping number 15 after 48 seconds 
2017-11-28T13:28:58: Stopping number 19 after 34 seconds 
2017-11-28T13:29:01: Stopping number 18 after 39 seconds 
2017-11-28T13:29:08: Stopping number 16 after 57 seconds 
2017-11-28T13:29:26: Stopping number 20 after 58 seconds 

正如你可以从输出中看到的,循环的10个实例并发甚至跑步尽管我没有运行10个PowerShell.exe实例。您可以使用InlineScript(如上例中所示)来直观地查看工作流何时启动和/或停止循环的实例。

+0

为什么使用2个inlinecript块? – Atf

+0

@Atf我正在使用Inline脚本块来显示每次迭代的开始和停止时间。正如你从输出中看到的那样,它表明有10个并发迭代正在运行。 –

+0

感谢您的回答。但在你的情况下,内联脚本中的命令不会创建任何进程。这是一个简单的写主机的东西。我一直使用PowerShell在我的内联脚本中调用不同的批处理文件,行为是一样的。我的问题仍然只有5个线程的powershell可以在任务管理器中看到,这是真实的。编辑问题澄清 – Atf

相关问题