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.