首页 > 开发 > PowerShell > 正文

PowerShell中Job相关命令及并行执行任务详解

2020-05-30 20:21:52
字体:
来源:转载
供稿:网友

前言

在 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 命令一起使用:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表