概述
相信大家對后台任務處理不陌生,比如.Net的后台線程處理,Java的線程處理等等。
而當我們用PowerShell這個強大的工具時怎么樣開啟后台任務呢,以及怎樣處理這些任務呢,本篇將會告訴你PowerShell后台任務處理。
1.什么時候會用到后台任務
當本地機器需要執行一個動作,此動作需要耗費很長時間,而機器在這段時間內只能等待,而我們希望在機器等待的這段時間內,我們還可以做其他事情。
這樣我們就可以用后台任務來解決上面遇到的問題。
2.后台任務主要用在哪些場景
(1)將文件拷貝到多台遠程機器,可以開啟多個任務進行並行拷貝
(2)多台遠程機器同時安裝文件,可以開啟多個任務進行並行安裝
等等
3.PowerShell里面怎么開啟后台任務
(1)Start-Job
1 $StartJob = Start-Job -ScriptBlock {Get-Process} 2 $StartJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
7 Job7 BackgroundJob Running True localhost Get-Process
(2)Invoke-Command -AsJob
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
4.處理Job
(1)Wait-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
-- ---- ------------- ----- ----------- -------- -------
31 Job31 BackgroundJob Completed False localhost Sleep -Seconds 1
33 Job33 BackgroundJob Running True localhost Sleep -Seconds 5
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
(2)Remove-Job
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
stop the job, or use the Force parameter.
Parameter name: Job
如果要強制Remove Job,可以在后面添加一個參數-Force
5.Start-Job傳參
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。
6.引用&擴展閱讀
以下鏈接為微軟提供的技術資料:
http://technet.microsoft.com/library/2bc04935-0deb-4ec0-b856-d7290cca6442(v=wps.630).aspx