后台作业

Cmdlet 可以在内部或作为 Windows PowerShell后台作业执行其作。 当 cmdlet 作为后台作业运行时,该工作以与 cmdlet 正在使用的管道线程不同的异步方式在自己的线程中完成。 从用户的角度来看,当 cmdlet 作为后台作业运行时,即使作业需要较长的时间完成,命令提示符也会立即返回,并且用户可以在作业运行时不中断地继续。

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

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

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

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

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

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

  • 创建派生自 System.Management.Automation.Job 类的对象。 此对象可以是自定义作业对象,也可以是 Windows PowerShell 提供的作业对象,例如 System.Management.Automation.PSEventJob 对象。

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

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

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

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

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

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

System.Management.Automation.JobRepository 管理和提供有关当前活动后台作业的信息。

System.Management.Automation.JobState 定义后台作业的状态。 状态包括“已启动”、“正在运行”和“已停止”。

System.Management.Automation.JobStateInfo 提供有关后台作业状态的信息;如果上次状态更改是由错误引起的,则作业进入其当前状态的原因。

System.Management.Automation.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