Az egyik legfőbb előnye a workflow-knak, hogy túlélik a számítógép újraindítását is. Az alábbi Test‑Restart workflowban a $c változót feltöltöm az első sorban, majd az utolsó sorban íratom ki a tartalmát, de közben a gépet újraindítom. Hogy jobban nyomon tudjam követni az eseményeket, ezért a korábbiakhoz hasonlóan még a c:\temp-be létrehozok egy-egy könyvtárat az aktuális idővel a nevében:
workflow Test-Restart{
$e = Get-CimInstance -ClassName CIM_ComputerSystem
$name = "WorkflowEleje-" + ([string] (get-date -Format "HHmmss"))
$result = New-Item -Path C:\temp -ItemType directory -name $name
Restart-Computer -Wait -Force
$e
$name = "WorkflowVege-" + ([string] (get-date -Format "HHmmss"))
$result = New-Item -Path C:\temp -ItemType directory -name $name
}
Újraindításnál fontos, hogy a Restart-Computer -nél használjuk a -Wait kapcsolót, mert ennek segítségével menti el a workflow az állapotát.
Futtatás során az alábbi kimenetet láthatjuk, megfigyelhető, hogy hosszabb tevékenységeknél megjelenik a progress bar:
147 . ábra Progress bar a workflow futtatása során
A workflow futtatása természetesen nem okoz gondot az újraindítás ellenére sem, ha azt egy távoli gépre futtatjuk:
PS C:\> Test-Restart -PSComputerName AzureWin7-2
Name PrimaryOwn Domain TotalPhys Model Manufactu PSCompute
erName icalMemor rer rName
y
---- ---------- ------ --------- ----- --------- ---------
AZUREWIN7-2 azuretools stad.local 187858... Virtua... Micros... AzureW...
PS C:\> dir \\AzureWin7-2\c$\temp
Directory: \\AzureWin7-2\c$\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/15/2015 10:03 PM WorkflowEleje-220318
d---- 2/15/2015 10:05 PM WorkflowVege-220537
Az előző fejezet alapján persze ez nem egy nagy dolog, hiszen tudjuk már, hogy a workflow-t futtató gépen tárolódnak a tevékenységek eredményei, így ebből a szempontból a távoli gép újraindítása nem okoz különösebb gondot. De vajon mi lesz, ha a saját gépemet indítom újra a workflow-val:
PS C:\> Test-Restart
Erről sok képernyőképet nem tudok közölni, hiszen a gépem pár másodperc múlva kiléptet és újraindul. Viszont egy másik gépről az alábbi szkripttel nyomon tudom követni a workflow haladását és a gépem életét:
dir \\azurewin7-1\c$\temp | Remove-Item
"Monitorozás indul $(Get-Date)"
while(!(dir \\azurewin7-1\c$\temp)){
Start-Sleep -Milliseconds 500
}
"Workflow első fele lefutott $(Get-Date)"
while(Test-Path \\azurewin7-1\c$\temp){
Start-Sleep -Milliseconds 500
}
"Újraindítás folyamatban $(Get-Date)"
while(!(test-connection azurewin7-1 -Quiet)){
Start-Sleep -Milliseconds 500
}
"Távoli gép már elérhető $(Get-Date)"
while(!(test-Path \\azurewin7-1\c$\temp)){
Start-Sleep -Milliseconds 500
}
"Temp könyvtár már elérhető $(Get-Date)"
while(@(dir \\azurewin7-1\c$\temp).count -lt 2){
Start-Sleep -Milliseconds 500
}
"Workflow mindkét része lefutott $(Get-Date)"
És ennek at eredménye:
Monitorozás indul 02/15/2015 23:16:59
Workflow első fele lefutott 02/15/2015 23:17:40
Újraindítás folyamatban 02/15/2015 23:18:50
Távoli gép már elérhető 02/15/2015 23:19:52
Temp könyvtár már elérhető 02/15/2015 23:19:52
Workflow mindkét része lefutott 02/15/2015 23:19:52
Mindebből az látszik, hogy a gépem újraindulása után nem kellett semmit sem tennem annak érdekében, hogy a workflow második fele is lefusson.
Megjegyzés
PowerShell 3.0-ban ez az automatikus folytatás még nem volt meg, be kellett lépni ugyanazzal a felhaszálóval a gépre és a Resume-Job cmdlettel folytatni kellett a wokflow-t.