Gépek újraindítása workflow-val

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:

140 . á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.



Word To HTML Converter