Export (0) Print
Expand All

Making a Workflow Suspend Itself

Published: June 24, 2013

Updated: June 24, 2013

Applies To: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows Server 2012 R2



One of the many benefits of running Windows PowerShell® workflows is that you can suspend and resume them as needed. This is crucial to some scenarios, in which parts of a workflow might be managed by different administrators or require manual intervention.

To suspend a workflow that you are running, use the Suspend-Job cmdlet. But you can also use Suspend-Workflow activity to suspend a workflow from within the workflow.

The Suspend-Workflow activity stops workflow processing temporarily. Before suspending, Windows PowerShell Workflow takes a checkpoint so the state and data are preserved when the workflow is resumed.

To resume the workflow, the user running the workflow uses the Resume-Job cmdlet. You cannot resume a workflow from within the workflow.

After the workflow is resumed, use the Windows PowerShell Job cmdlets to manage the workflow job and get its output, even if you were running the workflow interactively before it was suspended.

Use the Get-Job cmdlet to get the workflow job. To get the output of the workflow job, use the Receive-Job cmdlet.

The Suspend-Workflow activity returns a job object that represents the suspended job, even if you did not explicitly run the workflow as a job, such as by using the AsJob parameter.

The job object that Suspend-Workflow returns includes the job ID and job state. When the Suspend-Workflow activity is successful, the resulting job state is Suspended, as shown in the following example.

Workflow Test-Suspend
{
    $a = Get-Date
    Suspend-Workflow
    (Get-Date)- $a
}

PS C:\>Test-Suspend

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
8      Job8            PSWorkflowJob   Suspended     True            localhost            Test-Suspend      

To resume the workflow job, use the Resume-Job cmdlet. The Resume-Job cmdlet returns the workflow job object immediately, even though it might not yet be resumed. To get the current state of the workflow job, use the Get-Job cmdlet, as shown in the following example.

PS C:\>Resume-Job -Name Job8

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
8      Job8            PSWorkflowJob   Suspended     True            localhost            Test-Suspend      

PS C:\>Get-Job -Name Job8

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
8      Job8            PSWorkflowJob   Completed     True            localhost            Test-Suspend      

To get the output of a workflow job, use the Receive-Job cmdlet. The output shows that the value of the $a variable, which was defined before the workflow was suspended, is available when the workflow is resumed.

PS C:\>Get-Job -Name Job8 | Receive-Job

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 19
Milliseconds      : 823
Ticks             : 198230041
TotalDays         : 0.000229432917824074
TotalHours        : 0.00550639002777778
TotalMinutes      : 0.330383401666667
TotalSeconds      : 19.8230041
TotalMilliseconds : 19823.0041
PSComputerName    : localhost 

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft