Korábban láttuk, hogy a workflow-k felfüggesztésének alapját az adja meg, hogy a workflow-k valójában háttérfolyamatként futnak, amit explicit módon is láthatunk, ha az –AsJob paraméterrel indítjuk őket. Ha pedig háttérben futó folyamatról van szó, akkor adódik a lehetőség, hogy ezeket meg is lehe állítani és újra is lehet indítani a fő PowerShell folyamat zavarása nélkül. Nézzünk erre is egy példát!
workflow Test-Checkpoint {
$e = Get-CimInstance -ClassName CIM_DiskDrive
$name = "WorkflowEleje-" + ([string] (get-date -Format "HHmmss"))
$result = New-Item -Path C:\temp -ItemType directory -name $name
Checkpoint-Workflow
Suspend-Workflow
$e
$name = "WorkflowVege-" + ([string] (get-date -Format "HHmmss"))
$result = New-Item -Path C:\temp -ItemType directory -name $name
}
Ebben a workflow-ban kiolvasok némi diszkadatot, összerakok egy fájlnevet, majd ezzel a névvel létrehozok egy könyvtárat. Biztonság kedvéért a Check-Workflow -val elmentem az aktuális állapotot, majd a Suspend-Workflow -val felfüggesztem a működést. Futtassuk ezt egy távoli gépre:
PS C:\> Test-Checkpoint -AsJob -PSComputerName AzureWin7-2
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
8 Job8 PSWorkflowJob Running True AzureW...
Kis idő múlva természetesen már el is érjük a felfüggesztési pontot, a job állapota „Suspended” lesz:
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
8 Job8 PSWorkflowJob Suspended True AzureW...
De természetesen, ami a felfüggesztési pontig történt, annak megvan az eredménye:
PS C:\> dir \\AzureWin7-2\c$\temp
Directory: \\AzureWin7-2\c$\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/14/2015 3:38 PM WorkflowEleje-153858
Megjegyzés
Látható, hogy a New-Item cmdletből is „igazi” tevékenység lesz a workflow-n belül, azaz a –Path paraméter a távoli gépen belüli helyi elérési útként értelmezendő.
Ugyan azt írja a job, hogy van letölthető adat, ez most nem igaz, hiszen idáig semmit sem raktunk a kimenetre, így a Receive-Job nem ad semmit sem:
PS C:\> Receive-Job -Id 8
PS C:\>
Amivel még többet tudnak a workflow-k ez egyszerű megállítás – újraindításon kívül, hogy még úgy is újraindíthatók, ha az őket futtató PowerShell folyamatot bezárom és egy másikat indítok. Ennek demonstrálására most becsukom a PowerShell alkalmazást, majd nyitok egy újat. Azaz normál esetben ilyenkor a PowerShell mindent függvényt, változót, jobot és egyebeket elfelejt, de a felfüggesztett workflow-kra emlékszik:
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job8 PSWorkflowJob Suspended True AzureW...
Ugyan más az ID, de például a Name az ugyanaz maradt. Most ebben az új PowerShell ablakban engedem futni tovább a workflow-t a Resume-Job cmdlettel:
PS C:\> Resume-Job -Id 8
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
8 Job8 PSWorkflowJob Running True AzureW...
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
8 Job8 PSWorkflowJob Completed True AzureW...
PS C:\> dir \\AzureWin7-2\c$\temp
Directory: \\AzureWin7-2\c$\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/14/2015 3:38 PM WorkflowEleje-153858
d---- 2/14/2015 3:59 PM WorkflowVege-155903
PS C:\> Receive-Job -Id 8
DeviceID Caption Partitions Size Model PSComputerNa
me
-------- ------- ---------- ---- ----- ------------
\\.\PHYSIC... Virtual H... 1 136366917120 Virtual H... AzureWin7-2
\\.\PHYSIC... Virtual H... 1 42944186880 Virtual H... AzureWin7-2
Látható, hogy így is lefutott a workflow végig, és mivel csak egy WorkflowEleje könyvtárunk van, ezért biztosak lehetünk abban, hogy az eleje nem futott le mégegyszer. Ennek ellenére az elején lekérdezett diszk adatokat a végén is vissza tudta nekünk adni.