PowerShell workflow

A PowerShell 3.0 verziótól új lehetőség jelent meg szkriptek futtatására: a workflow (munkafolyamat). A workflow nagyon hasonlít a függvényhez, első nekifutásra úgy is gondolhatunk rá, mint egy olyan függvényre, aminél a function kulcsszó helyett a workflow kulcsszót használjuk:

workflow Hello {

    param([string] $nev)

   

    $c = Get-WmiObject -Class Win32_computersystem

    "Helló $nev! Üdvözlet a $($c.name) gépről."

} 

A workflow is egy névből, opcionálisan paraméterekből és végrehajtható szkriptblokkból áll. Itt csak egy szkriptblokkot lehet használni, azaz nincs Begin, Process és End rész, viszont lehet Parallel és Sequence blokkunk.

Ha ezt a fenti Hello workflow-t futtatjuk, akkor ugyanazt kapjuk, mintha függvény lenne:

PS C:\> hello -nev Tibor

Helló Tibor! Üdvözlet a STLENO gépről.

Mi mégis a nagy különbség? Nézzük meg egy kicsit részletesebben ezt a Hello workflow-t a Get‑Command segítségével:

PS C:\> Get-Command hello | format-list *

 

 

HelpUri              :

Definition           :

                           param([string] $nev)

                           $c = Get-WmiObject -Class Win32_computersystem

                           "Helló $nev! Üdvözlet a $($c.name) géprol."

 

XamlDefinition       : <Activity

                           x:Class="Microsoft.PowerShell.DynamicActivities.Act

                       ivity_1923589599"

                           xmlns="http://schemas.microsoft.com/netfx/2009/xaml

                       /activities"

                           xmlns:sad="clr-namespace:System.Activities.Debugger

                       ;assembly=System.Activities"

ScriptBlock          :

                                       [CmdletBinding()]

                                       param (

                                           [string]

                                           [string] $nev,

 

                                           [hashtable[]] $PSParameterCollectio

                       n,

                                           [string[]] $PSComputerName,

                                           [ValidateNotNullOrEmpty()] $PSCrede

                       ntial,

                                           [uint32] $PSConnectionRetryCount,

                                           [uint32] $PSConnectionRetryInterval

                       Sec,

                                           [ValidateRange(1, 2147483)][uint32]

                        $PSRunningTimeoutSec,

                                           [ValidateRange(1, 2147483)][uint32]

                        $PSElapsedTimeoutSec,

                                           [bool] $PSPersist,

                                           [ValidateNotNullOrEmpty()] [System.

                       Management.Automation.Runspaces.AuthenticationMechanism

                       ] $PSAuthentication,

                                           $job = [Microsoft.PowerShell.Comman

                       ds.ImportWorkflowCommand]::StartWorkflowApplication(

                                                               $PSCmdlet,

                                                               $jobName,

                                                               'a39c9958-2b15-

                       4c11-864d-683e72674505',

                                                               $AsJob,

                                                               $parameterColle

                       ctionProcessed,

                                                               $finalParameter

                       Collection,

                                                               $debuggerActive

                       )

Nem is másolom ide a teljes kimenetet, mert annyira hosszú, csak néhány kiragadott részt, de már ebben látszik egy furcsa tulajdonság, a XamlDefinition. Annak ellenére, hogy PowerShellben vagyunk, valójában ez az XML rész hajtódik végre a Windows Workflow Foundationben található workflow motor segítségével. Azaz fontos megjegyezni, hogy workflow-k esetében PowerShell szintaxissal valójában workflow-t írunk, így egy kicsit ezzel a technológiával is meg kell ismerkedjünk hamarosan.

Amit még láthatunk, hogy a ScriptBlock tulajdonságban egy komoly szkript van, az általunk definiálton kívül számos további paraméterrel, amelyek lehetővé teszik, hogy automatikusan rendelkezzen számos olyan speciális lehetőséggel, amit nem nekünk kell leprogramozni, hanem gyárilag tudja a workflow. Ez a bonyolult szkript fogja valójában megszólítani a Windows Workflow Foundationt és a StartWokflowApplication metódus hívásával átadja neki a XAML workflow definíciót. Nézzük, mi van a hátterében!



Word To HTML Converter