标签:style blog http io color ar os java for
相信大家对后台任务处理不陌生,比如.Net的后台线程处理,Java的线程处理等等。
而当我们用PowerShell这个强大的工具时怎么样开启后台任务呢,以及怎样处理这些任务呢,本篇将会告诉你PowerShell后台任务处理。
当本地机器需要执行一个动作,此动作需要耗费很长时间,而机器在这段时间内只能等待,而我们希望在机器等待的这段时间内,我们还可以做其他事情。
这样我们就可以用后台任务来解决上面遇到的问题。
(1)将文件拷贝到多台远程机器,可以开启多个任务进行并行拷贝
(2)多台远程机器同时安装文件,可以开启多个任务进行并行安装
等等
1 $StartJob = Start-Job -ScriptBlock {Get-Process} 2 $StartJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
7 Job7 BackgroundJob Running True localhost Get-Process
1 $InvokeCommandJob = Invoke-Command -ComputerName LocalHost -ScriptBlock {Get-Process} -AsJob 2 $InvokeCommandJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
15 Job15 RemoteJob Running True LocalHost Get-Process
开启了一个任务后,我们总不能不管它吧,现在来说下怎么处理这些Job
1 #创建一个等待1s的后台任务 2 $WaitJob1 = Start-Job -ScriptBlock {Sleep -Seconds 10} 3 #创建一个等待5s的后台任务 4 $WaitJob2 = Start-Job -ScriptBlock {Sleep -Seconds 15} 5 #等待两个Job完成 6 Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 2
1 Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 10
还有一些等待Job完成的命令
1 Wait-Job -Id $WaitJob1.Id,$WaitJob2.Id -Timeout 10 2 Wait-Job -Name $WaitJob1.Name,$WaitJob2.Name -Timeout 10 3 Wait-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId -Timeout 10 4 Wait-Job -State Running -Timeout 10
1 Remove-Job -Id $WaitJob1.Id,$WaitJob2.Id 2 Remove-Job -Name $WaitJob1.Name,$WaitJob2.Name 3 Remove-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId 4 Remove-Job -State Completed
1 Remove-Job -Job $WaitJob1,$WaitJob2 -Force
下面我来讲一个非常有趣的问题
1 $a = 1 2 $b = 2 3 $c = 0 4 $Job = Start-Job -ScriptBlock { 5 $c = $a + $b 6 $c > "D:\a.txt" 7 }
1 $a = 1 2 $b = 2 3 $c = 0 4 $Job = Start-Job -ArgumentList $a,$b -ScriptBlock { 5 param($a,$b) 6 $c = $a + $b 7 $c > "d:\a.txt" 8 }
运行上面的代码,可以看到文本文件中的内容为3。
以下链接为微软提供的技术资料:
http://technet.microsoft.com/library/2bc04935-0deb-4ec0-b856-d7290cca6442(v=wps.630).aspx
玩转PowerShell第一节——【后台任务处理】-技术&分享
标签:style blog http io color ar os java for
原文地址:http://www.cnblogs.com/jackson0714/p/4077454.html