后台作业

cmdlet 可以在内部或作为 Windows PowerShell 后台作业 执行其操作。 当某个 cmdlet 作为后台作业运行时,将以异步方式在独立于该 cmdlet 使用的管道线程的单独线程中完成工作。 从用户的角度来看,当某个 cmdlet 作为后台作业运行时,命令提示符会立即返回,即使该作业需要很长时间才能完成,并且在运行作业时,用户可以继续而不中断。

后台作业、子作业和作业存储库

支持后台作业的 cmdlet 返回的作业对象定义作业。 (启动作业 cmdlet 还会返回一个作业对象。 ) 作业的名称、用于指定作业的标识符、状态信息以及子作业包含在此定义中。 作业不执行任何工作。 每个后台作业至少有一个子作业,因为子作业执行实际工作。 当你运行 cmdlet 以便以后台作业的形式执行工作时,该 cmdlet 必须将作业和子作业添加到公共存储库(称为 作业存储库)。

有关如何在命令行中处理后台作业的详细信息,请参阅以下内容:

编写作为后台作业运行的 Cmdlet

若要编写可作为后台作业运行的 cmdlet,必须完成以下任务:

  • 定义 asJob 开关参数,使用户可以决定是否将该 cmdlet 作为后台作业运行。

  • 创建一个派生自 system.object 类的对象。 此对象可以是自定义作业对象,也可以是 Windows PowerShell 提供的作业对象,例如Pseventjob对象。

  • 在记录处理方法中,添加一个 if 语句来检测该 cmdlet 是否应作为后台作业运行。

  • 对于自定义作业对象,请实现 job 类。

  • 返回相应的对象,具体取决于 cmdlet 是否作为后台作业运行。

有关代码示例,请参阅 如何支持作业

Windows PowerShell 提供以下 api 来管理后台作业。

System.web 派生自定义作业对象。 这是一个抽象类。

Jobrepository 管理并提供有关当前活动的后台作业的信息。

Jobstate 用于定义后台作业的状态。 状态包括 "已启动"、"正在运行" 和 "已停止"。

Jobstateinfo 提供有关后台作业状态的信息,并且,如果上次状态更改是由错误引起的,则该作业进入其当前状态的原因。

Jobstateeventargs 提供在后台作业更改状态时引发的事件的参数。

Windows PowerShell作业 Cmdlet

Windows PowerShell 提供以下 cmdlet 来管理后台作业。

Get-Job

获取在当前会话中运行的 Windows PowerShell 后台作业。

Receive-Job

获取当前会话中的 Windows PowerShell 后台作业的结果。

Remove-Job

删除 Windows PowerShell 后台作业。

Start-Job

启动 Windows PowerShell 后台作业。

Stop-Job

停止 Windows PowerShell 后台作业。

Wait-Job

禁止显示命令提示符,直到在会话中运行的一个或全部 Windows PowerShell 后台作业完成。

另请参阅

编写 Windows PowerShell Cmdlet