婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PowerShell中Job相關命令及并行執行任務詳解

PowerShell中Job相關命令及并行執行任務詳解

熱門標簽:真人和電話機器人對話 信陽話務外呼系統怎么收費 雷霆電話機器人電話 電話智能外呼系統誠信合作 金融電銷公司怎么辦理外呼系統 安徽400電話辦理 什么渠道可以找外呼系統客戶 使用電話機器人電銷是否違法 湖州電銷防封卡

前言

在 PowerShell 中可以輕松的執行后臺任務并且讓多個后臺任務并行執行。本文介紹 PowerShell 中 Job 相關的一些命令,并通過 demo 演示如何在后臺同時執行多個任務。下面話不多說了,來一起看看詳細的介紹吧。

PowerShell 中執行后臺任務的模式

下圖描述了在 PowerShell 中執行后臺任務的進程模型(此圖來自互聯網):

首先我們需要一個 PowerShell 進程執行與用戶交互的命令,比如執行 Start-Job 命令運行一個后臺任務。每一個這樣的后臺任務都會在一個新啟動的 PowerShell 進程中執行。所以,如果我們同時啟動三個后臺任務,那么一共有四個 PowerShell 進程在同時運行。

Job 相關的命令

Start-Job 命令會啟動一個運行在后臺的任務。注意,每通過 Start-Job 命令運行一個任務都會創建一個單獨的 PowerShell 進程。

Stop-Job 命令用來停止一個正在運行的后臺任務(由 Start-Job 啟動的任務)。

Get-Job 命令用來獲得當前 session 中的后臺任務對象。

Wait-Job 命令阻塞當前的執行流程,等待指定的后臺任務執行結束。

Receive-Job 命令用來獲得后臺執行任務的執行結果。比如在一個后臺任務結束時,可以通過 Receive-Job 來得到結果,并輸出任務執行時的 output。

Remove-Job 命令刪除當前 session 中的已經完成的任務。當一個任務運行結束后,它并不會被自動刪除,除非你調用 Remove-Job 命令進行刪除,或者是關閉這個 session。如果使用 Remove-Job 刪除一個正在運行的任務,命令會運行失敗。此時需要先使用 Stop-Job 命令先停止任務,然后再用 Remove-Job 進行刪除。

在后臺執行任務

如果只是啟動一個后臺執行的任務,不需要知道任務執行的結果,也不關心任務何時執行結束,那么僅僅使用 Start-Job 命令啟動任務的執行就可以了:

> Start-Job -ScriptBlock { sleep 5 }

啟動單個任務并等待任務結束

多數情況下我們是需要知道任務的結束時間的,此時可以通過 Wait-Job 命令阻塞執行流程,直到等待的任務結束:

> Start-Job -ScriptBlock { sleep 5; Write-Host "Hello world."; } | Wait-Job

注意:上面的內容是由 Wait-Job 命令輸出的,當時任務的狀態為 "Completed"。

更進一步,我們還想要獲得任務執行過程中的輸出。這時我們就需要用到 Receive-Job 命令。你可以在任務啟動后的任何時刻執行 Receive-Job 命令,但是如果想要得到完整的輸出,就需要在任務結束后調用,此時需要配合 Wait-Job 命令一起使用:

$job = Start-Job -ScriptBlock { sleep 5; Write-Host "Hello world."; }
Wait-Job $job
Receive-Job -Job $job

把上面的代碼保存到文件 mytask.ps1 中執行:

Receive-Job 命令輸出了我們在后臺執行的任務的 output。

在后臺執行多個任務并等待結束

因為 Start-Job 命令是非阻塞的,所以理論上我們可以執行任意多次從而啟動很多的后臺任務。和等待單個任務相同,仍然可以使用 Wait-Job 命令來等待所有的任務結束,不過此時需要配合 Get-Job 命令一起使用:

> Get-Job | Wait-Job

更常用的方式是我們在 while 循環中不斷的檢查任務的狀態,當所有任務的狀態都是 "Completed" 時表示全部任務執行結束:

Remove-Job *
#測試計時開始
$start_time = (Get-Date)
Start-Job -ScriptBlock { sleep 9; Write-Host "Hello myJob1."; } -Name "myJob1"
Start-Job -ScriptBlock { sleep 5; Write-Host "Hello myJob2."; } -Name "myJob2"
$taskCount = 2
while($taskCount -gt 0)
{
 foreach($job in Get-Job)
 {
  $state = [string]$job.State
  if($state -eq "Completed")
  { 
   Write-Host($job.Name + " 已經完成")
   Receive-Job $job
   $taskCount--
   Remove-Job $job
  }
 }
 sleep 1
}
"所有任務已完成" 
#得出任務運行的時間
(New-TimeSpan $start_time).totalseconds

把上面的代碼保存到 mytask.ps1 文件中并執行:

代碼中我們給每個任務起了名字,并在 while 循環中不斷的使用 Get-Job 命令檢查任務當前的狀態,如果發現任務的狀態為 "Completed",就通過 Remove-Job 命令刪除它,并在刪除前打印任務的名稱和 output。

封裝一個執行后臺任務的函數

下面我們用封裝一個簡單的函數來并行執行多個任務:

function Run-Tasks
{
 Param
 (
  $taskArr,
  $parallelcount=1
 )
 #測試計時開始
 $startTime = (Get-Date)
  #移除本次會話中已有的所有后臺任務
 Remove-Job *
 # 使用變量 $taskCount 保存還沒有執行完成的任務數
 $taskCount = $taskArr.Length
 
 #判斷設定的并行任務數是否超過當前任務隊列中的任務數
 if($parallelCount -gt $taskArr.Length)
 {
  $parallelCount = $taskArr.Length
 }
 #啟動初始任務
 foreach($i in 1..$parallelCount)
 {
  Start-Job $taskArr[$i - 1] -Name "task$i"
 }
 #初始任務完成后開始的任務
 $nextIndex = $parallelCount
 #當任務隊列中還有任務時不斷輪詢已建立的任務,當一個后臺任務結束時刪除這個任務,
 #然后從任務隊列中取出下一個任務進行執行,然后等待所有任務執行完成。
 while(($nextIndex -lt $taskArr.Length) -or ($taskCount -gt 0))
 {
  foreach($job in Get-Job)
  {
   $state = [string]$job.State
   if($state -eq "Completed")
   { 
    Write-Host($job.Name + " 已經完成,結果如下:")
    Receive-Job $job
    Remove-Job $job
    $taskCount--
    if($nextIndex -lt $taskArr.Length)
    { 
     $taskNumber = $nextIndex + 1
     Start-Job $taskArr[$nextIndex] -Name "task$taskNumber"
     $nextIndex++
    }
   }
  }
  sleep 1
 }
 "所有任務已完成"
 #得出任務運行的時間
 (New-TimeSpan $startTime).totalseconds
}

上面的函數會在后臺執行用戶的任務,然后等待所有的任務執行結束。并且用戶可以指定同時執行的任務的個數,在任務執行完成后,輸出任務的 output。接下來讓我們嘗試使用這個函數執行一些任務:

#定義 6 個任務
$task1 = {sleep 12; Write-Host "Hello myJob1."; }
$task2 = {sleep 5; Write-Host "Hello myJob2."; }
$task3 = {sleep 8; Write-Host "Hello myJob3."; }
$task4 = {sleep 3; Write-Host "Hello myJob4."; }
$task5 = {sleep 20; Write-Host "Hello myJob5."; }
$task6 = {sleep 15; Write-Host "Hello myJob6."; } 
#將 6 個任務寫入到一個數組中作為任務隊列
$taskArr = $task1, $task2, $task3, $task4, $task5, $task6
#運行數組中的任務,允許同時運行 4 個任務
Run-Tasks -taskArr $taskArr -parallelcount 4

下面是運行的結果:

總結

能夠隨心所欲的在后臺執行任務是一件感覺非常棒的事情!當然,對于工作來說你能夠把事情做得又快又好(又好可不敢說)。本文只是提供了一個簡單的運行并行任務的 demo,省略了異常處理等重要內容,但這已經足夠您開始 PowerShell 并行任務之旅了。

參考:

《Windows PowerShell 實戰第二版》
Powershell:簡單實現并行任務的腳本

您可能感興趣的文章:
  • PowerShell基本使用教程
  • PowerShell 指令操作集合(小結)
  • 如何利用PowerShell監控Win-Server性能詳解
  • 基于PowerShell在Ubuntu系統的使用詳解
  • PowerShell 遠程執行任務的方法步驟
  • powershell玩轉SQL SERVER所有版本的方法
  • 如何在power shell添加vim實現代碼示例

標簽:德州 運城 山南 濟南 湛江 岳陽 六盤水 鶴崗

巨人網絡通訊聲明:本文標題《PowerShell中Job相關命令及并行執行任務詳解》,本文關鍵詞  PowerShell,中,Job,相關,命令,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PowerShell中Job相關命令及并行執行任務詳解》相關的同類信息!
  • 本頁收集關于PowerShell中Job相關命令及并行執行任務詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人亚洲一区二区一| 日韩美女精品在线| 日本中文字幕一区二区视频| 欧美三级韩国三级日本三斤| 国产成人高清在线| 极品少妇xxxx精品少妇| 午夜精品福利在线| 色欲综合视频天天天| 91片在线免费观看| 在线亚洲+欧美+日本专区| 国产九色精品成人porny| 激情综合色综合久久| 风间由美一区二区av101| 91在线看国产| 欧美丰满一区二区免费视频| 欧美一区二区高清| 奇米综合一区二区三区精品视频| 亚洲综合一区二区精品导航| 日本成人在线视频网站| 麻豆精品在线播放| 欧美电视剧免费观看| 91精品国产乱码| 日韩手机在线导航| 日韩你懂的电影在线观看| 国产精品美女久久久久久久久 | 欧美三级电影网站| 97se亚洲国产综合自在线不卡| 欧美一区二区精美| 国产盗摄一区二区| 国产肉丝袜一区二区| 国产精品自在欧美一区| 热久久国产精品| 蜜桃视频一区二区三区在线观看| 欧美专区日韩专区| 亚洲综合成人在线| 日韩精品一区二区三区蜜臀| 一级特黄大欧美久久久| 日韩毛片一二三区| 欧美激情综合网| 欧美精品丝袜中出| 亚洲最新视频在线观看| 亚洲国产精品一区二区www| 国产精品久久久久永久免费观看| 欧美精品xxxxbbbb| 99国产精品久久久久久久久久 | 制服丝袜在线91| 久久精品国产免费看久久精品| 亚洲欧美区自拍先锋| 国产欧美日韩综合精品一区二区| 欧美变态tickling挠脚心| 麻豆91在线播放| 91日韩精品一区| 国产精品久久午夜| 国产午夜一区二区三区| 成人免费高清视频| 精品日韩一区二区三区| 91伊人久久大香线蕉| 国产在线精品一区二区不卡了 | 中文字幕欧美日韩一区| 欧美一区二区三区日韩视频| 91无套直看片红桃| 成人午夜视频网站| 激情小说欧美图片| 久久99精品一区二区三区| 亚洲午夜精品一区二区三区他趣| 中文字幕免费观看一区| 日韩免费在线观看| 欧美精品tushy高清| 在线一区二区三区| av在线一区二区三区| 国产高清精品网站| 极品美女销魂一区二区三区 | 亚洲不卡一区二区三区| 国产精品午夜在线观看| 精品国产一区二区亚洲人成毛片| 欧美日韩国产高清一区二区三区| 色婷婷久久久久swag精品| 91亚洲精品一区二区乱码| 亚洲自拍偷拍麻豆| 一区二区不卡在线播放| 亚洲视频在线一区观看| 亚洲国产高清不卡| 亚洲三级在线播放| 久久精品人人做人人爽97| 精品久久久久久最新网址| 3atv一区二区三区| 6080日韩午夜伦伦午夜伦| 欧美日韩情趣电影| 国产精品主播直播| 日韩午夜中文字幕| 久久久久久久久久久久久久久99 | 婷婷亚洲久悠悠色悠在线播放| 国产精品久久久久久久久免费相片 | 三级不卡在线观看| 国产欧美视频一区二区| 日韩美一区二区三区| 亚洲人成影院在线观看| 国产欧美日韩三级| 亚洲欧美在线高清| 色综合久久天天综合网| 国产亚洲欧美日韩日本| 麻豆一区二区99久久久久| 欧美挠脚心视频网站| 亚洲乱码国产乱码精品精的特点| 91啪亚洲精品| 色国产综合视频| 欧美熟乱第一页| 8x福利精品第一导航| 欧美精品一二三四| 国产日韩欧美电影| 日本一区二区成人| 亚洲欧美精品午睡沙发| 天堂影院一区二区| 丝袜美腿亚洲色图| 国产成人亚洲精品狼色在线| 日本美女一区二区三区| 激情另类小说区图片区视频区| 一区二区三区免费在线观看| 无码av中文一区二区三区桃花岛| 天堂影院一区二区| 日产欧产美韩系列久久99| 激情综合网av| 成人免费高清视频在线观看| 色国产精品一区在线观看| 国产一区中文字幕| 91久久香蕉国产日韩欧美9色| 在线免费亚洲电影| 7777精品伊人久久久大香线蕉 | 在线观看不卡视频| 一区二区成人在线观看| 欧美三级在线视频| 蜜臀精品一区二区三区在线观看 | 欧美日韩在线精品一区二区三区激情| 日韩美女精品在线| 欧美伦理电影网| 东方欧美亚洲色图在线| 亚洲成av人影院| 国产亚洲一二三区| 在线观看亚洲a| 国产一区二区在线影院| 综合久久久久久久| 日韩三级在线观看| 成人国产在线观看| 亚洲成人精品影院| 国产人伦精品一区二区| 欧美日韩电影在线| 国产黄色精品网站| 亚洲欧洲另类国产综合| 日韩一级二级三级| 欧美在线视频不卡| 成人理论电影网| 激情久久五月天| 蜜臀久久99精品久久久久宅男| 亚洲成人av电影| 91女神在线视频| 亚洲最大成人网4388xx| 欧洲亚洲精品在线| 亚洲精品高清视频在线观看| 日本系列欧美系列| 日韩精品一区二区三区视频| 一区二区三区美女视频| 国产一区在线不卡| 国产日产欧美一区二区三区| 精品一区二区国语对白| 欧洲视频一区二区| 综合欧美亚洲日本| 欧美日韩另类一区| 亚洲蜜臀av乱码久久精品| 国产成人精品亚洲777人妖| 欧美丰满少妇xxxbbb| 亚洲福利一区二区| 在线影院国内精品| 亚洲sss视频在线视频| 久久亚区不卡日本| 免费日韩伦理电影| 在线观看网站黄不卡| 欧美激情在线免费观看| 丁香婷婷综合色啪| 成人午夜电影久久影院| 国产精品免费aⅴ片在线观看| 国产毛片精品国产一区二区三区| 美国三级日本三级久久99| 精品夜夜嗨av一区二区三区| 国产亚洲短视频| 日韩精品一区二区三区老鸭窝| 国产传媒久久文化传媒| 韩国av一区二区| 一本色道久久综合精品竹菊| 91精品久久久久久久久99蜜臂| 国产1区2区3区精品美女| 成人激情综合网站| 日韩一区二区影院| 一区二区视频在线看| 丰满放荡岳乱妇91ww| 久久亚洲二区三区| 日韩av一区二区三区| 国产精品白丝在线| 成人高清免费观看| 亚洲乱码国产乱码精品精小说 | 亚洲乱码中文字幕|