A munkafolyamatok automatikus paraméterei

Ahogy említettem, a workflow-knak további többletszolgáltatásai is vannak a függvényekhez képest, ezeket az automatikus paramétereiken keresztül derítsük fel! Az első Hello workflow paraméterei a következők:

PS C:\> (Get-Command Hello).parameters.keys

nev

PSParameterCollection

PSComputerName

PSCredential

PSConnectionRetryCount

PSConnectionRetryIntervalSec

PSRunningTimeoutSec

PSElapsedTimeoutSec

PSPersist

PSAuthentication

PSAuthenticationLevel

PSApplicationName

PSPort

PSUseSSL

PSConfigurationName

PSConnectionURI

PSAllowRedirection

PSSessionOption

PSCertificateThumbprint

PSPrivateMetadata

AsJob

JobName

InputObject

Verbose

Debug

ErrorAction

WarningAction

ErrorVariable

WarningVariable

OutVariable

OutBuffer

PipelineVariable

Látható, hogy az általam felvett nev paraméter mellett számos PS kezdetű olyan paraméter is van, amelyeket nem én definiáltam, hanem a PowerShell rakta hozzá automatikusan, ehhez jönnek hozzá a függvényeknél megszokott common paraméterek, mint például Verbose, Debug, stb.

Megjegyzés

Míg a PowerShell függvények és szkriptek paramétereinek és változóinak nevében akár ékezetes karaktereket is használhatunk, addig a workflowkban csak az angol abc betűit, számokat, aláhúzást és kötőjelet tehetünk.

Nézzük tehát, hogy mire jók ezek a PS kezdetű paraméterek, ezek közül is elsőként a PSComputerName paramétert, ami várhatóan a távoli végrehajtást szolgálja! A Hello workflow-t most egyszerre 3 gépen futtatom anélkül, hogy egy betűt is hozzá kellett volna írnom az eredeti kódomhoz:

PS C:\> hello -PSComputerName AzureWin7-1, AzureWin7-2, AzureDC-1 -nev Tibi

Helló Tibi! Üdvözlet a AZUREWIN7-1 géprol.

Helló Tibi! Üdvözlet a AZUREDC-1 géprol.

Helló Tibi! Üdvözlet a AZUREWIN7-2 géprol.

Kényelmes a paraméterátadás is a workflow-k számára, még akkor is ha a megszólított több gépnek más és más adatot szeretnénk átadni. A PSParameterCollection paraméterrel hosonló dolgot tudunk tenni, mint  splatting operátorral, azaz a neki átadott hashtáblákból képzett tömb elemeit „szétpaszírozzuk” az egyes paraméterek között a kulcs alapján, de mivel szerepelhet a PSComputerName is a hashtábla kulcsai között, ezért ezzel célgépspecifikus paraméterátadást valósíthatunk meg. Az alábbi példában az AzureWin7-1 gépnek így Tibi-t adok át nev-ként, az AzureWin7-2-nek Zsófi-t és így tovább:

PS C:\> Hello -PSParameterCollection @{PSComputername = "AzureWin7-1"; nev = "T

ibi"},

>> @{PSComputername = "AzureWin7-2"; nev = "Zsófi"},

>> @{PSComputername = "AzureDC-1"; nev = "Fanni"}

>> 

Helló Zsófi! Üdvözlet az AZUREWIN7-2 géprol.

Helló Tibi! Üdvözlet az AZUREWIN7-1 géprol.

Helló Fanni! Üdvözlet az AZUREDC-1 géprol.

A következő gyakran használt paraméter az –AsJob, ezzel a workflow a háttérben fog futni, és a *-Job cmdletekkel fogjuk tudni kezelni:

PS C:\> Hello -nev Tibor! -AsJob

 

Id     Name            PSJobTypeName   State         HasMoreData     Location

--     ----            -------------   -----         -----------     --------

6      Job6            PSWorkflowJob   Running       True            localhost

 

 

PS C:\> Get-Job

 

Id     Name            PSJobTypeName   State         HasMoreData     Location

--     ----            -------------   -----         -----------     --------

6      Job6            PSWorkflowJob   Completed     True            localhost

 

 

PS C:\> Receive-Job -Id 6

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

PS C:\> Remove-Job -Id 6

Igazából minden workflow futtatása job-bá válik, ha felfüggesztődik a futtatása, még azok is, amiknél nem használjuk az –AsJob kapcsolót. Nézzünk erre a Hello függvénynek egy kicsit módosított változatát:

workflow Hello {

    param([string] $nev)

   

    $c = Get-WmiObject -Class Win32_computersystem

    "Felfüggesztés előtt"

    Suspend-Workflow

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

} 

 Ezt a workflow-t az utolsó sor előtt felfüggesztem a Suspend-Workflow  cmdlettel. Ha ezt futtatjuk a következő kimenetet kapjuk:

PS C:\> Hello Felfüggesztett

Felfüggesztés előtt

 

Id     Name            PSJobTypeName   State         HasMoreData     Location

--     ----            -------------   -----         -----------     --------

8      Job8            PSWorkflowJob   Suspended     True            localhost

Látható az is, hogy a felfüggesztés előtti kimenetet még megkaptuk a konzolon, de utána már jobbá minősült át a workflownk automatikusan. Ezzel nemsokára részletesebben foglalkozunk.



Word To HTML Converter