我们在使用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