Suspend-Job

暂时停止工作流作业。

语法

Suspend-Job
       [-Force]
       [-Wait]
       [-Id] <Int32[]>
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Suspend-Job
       [-Job] <Job[]>
       [-Force]
       [-Wait]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Suspend-Job
       [-Force]
       [-Wait]
       [-Name] <String[]>
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Suspend-Job
       [-Force]
       [-Wait]
       [-InstanceId] <Guid[]>
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Suspend-Job
       [-Force]
       [-Wait]
       [-Filter] <Hashtable>
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Suspend-Job
       [-Force]
       [-Wait]
       [-State] <JobState>
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]

说明

Suspend-Job cmdlet 挂起工作流作业。 暂停意味着暂时中断或暂停工作流作业。 此 cmdlet 允许运行工作流的用户挂起工作流。 它补充了 Suspend-Workflowhttps://go.microsoft.com/fwlink/?LinkId=267141 活动,该活动是挂起工作流中的命令。

Suspend-Job cmdlet 仅适用于工作流作业。 它不适用于标准后台作业,例如使用 Start-Job cmdlet 启动的作业。

若要标识工作流作业,请在作业的 PSJobTypeName 属性中查找 PSWorkflowJob 的值。 若要确定特定自定义作业类型是否支持 Suspend-Job cmdlet,请参阅自定义作业类型的帮助主题。

暂停工作流作业时,工作流作业将运行到下一个检查点、挂起并立即返回工作流作业对象。 若要等待挂起在获取作业之前完成,请使用 Wait 参数 Suspend-JobWait-Job cmdlet。 当工作流作业暂停时,作业的 State 属性的值将挂起。

正确挂起依赖于检查点。 当前作业状态、元数据和输出保存在检查点中,以便可以恢复工作流作业,而不会丢失状态或数据。 如果工作流作业没有检查点,则无法正确挂起。 若要将检查点添加到正在运行的工作流,请使用 PSPersist 工作流通用参数。 可以使用 Force 参数立即挂起任何工作流作业,并挂起没有检查点的工作流作业,但该作可能会导致状态和数据丢失。

在自定义作业类型上使用作业 cmdlet(例如工作流作业(PSWorkflowJob)之前,请使用 Import-Module cmdlet 或使用模块中的 cmdlet 导入支持自定义作业类型的模块。

此 cmdlet 已在 Windows PowerShell 3.0 中引入。

示例

示例 1:按名称挂起工作流作业

此示例演示如何挂起工作流作业。

第一个命令创建 Get-SystemLog 工作流。 工作流使用 CheckPoint-Workflow 活动在工作流中定义检查点。

第二个命令使用 AsJob 参数,该参数对所有工作流通用,以后台作业的形式运行 Get-SystemLog 工作流。 该命令使用 JobName 工作流通用参数来指定工作流作业的友好名称。

第三个命令使用 Get-Job cmdlet 来获取 LogflowJob 工作流作业。 输出显示 PSJobTypeName 属性的值是 PSWorkflowJob。

第四个命令使用 Suspend-Job cmdlet 挂起 LogflowJob 作业。 作业将运行到检查点,然后挂起。

#Sample Workflow
workflow Get-SystemLog
{
    $Events = Get-WinEvent -LogName System
    CheckPoint-Workflow
    inlinescript {\\Server01\Scripts\Analyze-SystemEvents.ps1 -Events $Events}
}
Get-SystemLog -AsJob -JobName "LogflowJob"
Get-Job -Name LogflowJob

Id   Name          PSJobTypeName   State       HasMoreData     Location   Command
--   ----          -------------   -----       -----------     --------   -------
4    LogflowJob    PSWorkflowJob   Running     True            localhost   Get-SystemLog

Suspend-Job -Name LogflowJob

Id   Name          PSJobTypeName   State       HasMoreData     Location   Command
--   ----          -------------   -----       -----------     --------   -------
4    LogflowJob    PSWorkflowJob   Suspended   True            localhost   Get-SystemLog

示例 2:暂停和恢复工作流作业

此示例演示如何挂起和恢复工作流作业。

第一个命令挂起 LogWorkflowJob 作业。该命令会立即返回。 输出显示工作流作业仍在运行,即使它正在挂起。

第二个命令使用 Get-Job cmdlet 来获取 LogWorkflowJob 作业。 输出显示工作流作业已成功挂起。

第三个命令使用 Get-Job cmdlet 来获取 LogWorkflowJob 作业和 Resume-Job cmdlet 以恢复它。 输出显示工作流作业已成功恢复,现在正在运行。

Suspend-Job -Name LogWorkflowJob

Id   Name          PSJobTypeName      State         HasMoreData     Location      Command
--   ----          -------------      -----         -----------     --------      -------
67   LogflowJob    PSWorkflowJob      Running       True            localhost     LogWorkflow

Get-Job -Name LogWorkflowJob

Id   Name          PSJobTypeName      State         HasMoreData     Location      Command
--   ----          -------------      -----         -----------     --------      -------
67   LogflowJob    PSWorkflowJob      Suspended     True            localhost     LogWorkflow

Get-Job -Name LogWorkflowJob | Resume-Job

Id     Name          PSJobTypeName      State       HasMoreData     Location      Command
--     ----          -------------      -----       -----------     --------      -------
67     LogflowJob    PSWorkflowJob      Running     True            localhost     LogWorkflow

示例 3:在远程计算机上挂起工作流作业

Invoke-Command -ComputerName Srv01 -ScriptBlock {Suspend-Job -Filter @{CustomID="031589"}

此命令使用 Invoke-Command cmdlet 在 Srv01 远程计算机上挂起工作流作业。 Filter 参数的值是指定 CustomID 值的哈希表。 此 CustomID 是作业元数据(PSPrivateMetadata)。

示例 4:等待工作流作业挂起

Suspend-Job VersionCheck -Wait

Id     Name          PSJobTypeName      State         HasMoreData     Location      Command
--     ----          -------------      -----         -----------     --------      -------
 5     VersionCheck  PSWorkflowJob      Suspended     True            localhost     LogWorkflow

此命令挂起 VersionCheck 工作流作业。 该命令使用 Wait 参数等待工作流作业挂起。 当工作流作业运行到下一个检查点并挂起时,该命令将完成并返回作业对象。

示例 5:强制工作流作业挂起

Suspend-Job Maintenance -Force

此命令强行挂起维护工作流作业。 维护作业没有检查点。 它无法正确挂起,可能无法正确恢复。

参数

-Confirm

在运行 cmdlet 之前,提示你进行确认。

类型:SwitchParameter
别名:cf
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Filter

指定条件的哈希表。 此 cmdlet 会挂起满足所有条件的作业。 输入一个哈希表,其中键是作业属性,值是作业属性值。

类型:Hashtable
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Force

立即暂停工作流作业。 此作可能会导致状态和数据丢失。

默认情况下,Suspend-Job 允许工作流作业运行到下一个检查点,然后挂起它。 还可以使用此参数来挂起没有检查点的工作流作业。

类型:SwitchParameter
别名:F
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Id

指定此 cmdlet 挂起的作业 ID。

ID 是一个整数,用于唯一标识当前会话中的作业。 记住和键入比实例 ID 更容易,但它仅在当前会话中是唯一的。 可以键入一个或多个 ID,用逗号分隔。 若要查找作业的 ID,请使用 Get-Job cmdlet。

类型:Int32[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-InstanceId

指定此 cmdlet 挂起的作业的实例 ID。 默认值为所有作业。

实例 ID 是一个 GUID,用于唯一标识计算机上的作业。 若要查找作业的实例 ID,请使用 Get-Job

类型:Guid[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Job

指定此 cmdlet 停止的工作流作业。 输入包含工作流作业的变量或获取工作流作业的命令。 还可以通过管道将工作流作业传递给 Suspend-Job cmdlet。

类型:Job[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Name

指定此 cmdlet 挂起的作业的友好名称。 输入一个或多个工作流作业名称。 支持通配符。

类型:String[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-State

指定作业状态。 此 cmdlet 仅停止处于指定状态的作业。 此参数的可接受值为:

  • NotStarted
  • 运行
  • 完成
  • 失败
  • 停止
  • 封锁
  • 暂停
  • 断开
  • 暂停
  • 停止

Suspend-Job 仅挂起处于运行 状态的 工作流作业。

有关作业状态的详细信息,请参阅 JobState 枚举

类型:JobState
接受的值:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Wait

指示此 cmdlet 将禁止命令提示符,直到工作流作业处于挂起状态。 默认情况下,即使工作流作业尚未处于挂起状态,Suspend-Job 也会立即返回。

Wait 参数等效于将 Suspend-Job 命令管道传递给 Wait-Job cmdlet。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-WhatIf

显示 cmdlet 运行时会发生什么情况。 cmdlet 未运行。

类型:SwitchParameter
别名:wi
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

Job

可以通过管道将所有类型的作业传递给此 cmdlet。 但是,如果 Suspend-Job 获取不受支持的类型的作业,它将返回终止错误。

输出

Job

此 cmdlet 返回挂起的作业。

备注

Windows PowerShell 包含以下 Suspend-Job别名:

  • sujb

保存挂起作业的机制和位置可能因作业类型而异。 例如,挂起的工作流作业默认保存在平面文件存储中,但也可以保存在数据库中。

如果提交未处于“正在运行”状态的工作流作业,Suspend-Job 会显示警告消息。 若要禁止显示警告,请使用 WarningAction 具有 SilentlyContinue 值的公共参数。

如果作业不是支持暂停的类型,Suspend-Job 返回终止错误。

若要查找挂起的工作流作业(包括此 cmdlet 挂起的作业),请使用 cmdlet 的 Get-Job 参数获取处于挂起状态的工作流作业。

某些作业类型具有可阻止 Windows PowerShell 挂起作业的选项或属性。 如果尝试暂停作业失败,请验证作业选项和属性是否允许挂起。