[Windows PowerShell08]-PowerShell Job 实现多线程

       我们在使用PowerShell的时候,通常需要执行一些多线程的任务。PowerShell作为在服务器管理领域表现出色的脚本语言,对于多线程的支持也是非常好的。PowerShell 提供了一系列Job相关的命令。详细内容可以参见MSDNhttp://technet.microsoft.com/en-us/library/dd347692.aspx

      1)Start-Job

      开始一个Job,这个命令有很多参数(具体见MSDN),通常我们使用的参数主要有:

      - scriptblock 此参数是传入将要在后台执行的powershell命令,如 Get-Process,Get-Service等等。

      - computername 此参数是传入后台任务执行的目标机器,这个参数表明此命令是支持远程执行的。

      - filepath 此参数是传入一个powershell文件路径,当job起来的时候,powershell在后台执行这个脚本里面的文件。

      - name 此参数传入job的名称。此参数比较有用,因为后面会使用name来查看job的运行状态,通过job的name来获取后台运行的结果。

      - runAs32 此参数用得不是很多,但是关键时刻比较有用,因为它允许job运行在32位的进程中,即使操作系统是64位的,解决兼容性问题。

      2)Receive-Job

      - Id 此参数顾名思义,根据Id来获取Job

      - Name 根据Job的名字来获取Job

      - State 根据Job的运行状态来获取Job

      3)Wait-Job

      - 等待所有的Job完成

      Get-Job | Wait-Job

      - 等待多台远程服务器上得Job运行结束

      C:\PS>$s = new-pssession server01, server02, server03
      C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}
      C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}
      C:\PS> $done.count
      3

      4)远程执行命令作为Job运行(Invoke-Command as Job )

      C:\PS>$s = new-pssession Server01, Server02, Server03
      C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob
      C:\PS> $j | wait-job

      5)Stop-Job / Remove-Job

      停止Job/ 移除Job

      

你可能感兴趣的:(unittest)