Paraméterek átvétele és a szkript által visszaadott érték

Szkriptjeinknek is lehetnek paraméterei, melyeket – hasonlóan a függvényekhez - az $args változóban is elérhetjük. Emlékeztetőül, az $args  egy tömb, amelybe tetszés szerinti típusú értékek kerülhetnek, a megjelenő típus a beírt értéktől függ, ezért kényesebb esetekben célszerű lehet a paraméterek számán kívül azok típusát is ellenőrizni a további ténykedés előtt, vagy „fejlett” szkripteket készíteni a 2.5 Fejlett függvények – script cmdletek fejezet szerint. Az alábbi szkriptben csak a megfelelő számú paraméter meglétét ellenőrizzük:

if ($args.Length -ne 3)

{

     Write-Error "A szkript csak 3 paraméterrel indítható!"

     return "Hibás futás!"

}

Write-Host $args.GetType()

foreach($arg in $args)

{

     Write-Host $arg

     Write-Host $arg.GetType()

    

}

return "Jó futás!"

Ha a paramétereket tároló tömb nem három elemből áll, akkor hibaüzenetet írunk ki, és a return  kulcsszó után megadjuk a szkript által visszaadott értéket (a return utáni rész már nem fut le). Paraméter nélküli indítási kísérlet esetén a következő hibaüzenet jelenik meg:

PS C:\> ./parameter.ps1

C:\parameter.ps1 : A szkript csak 3 paraméterrel indítható!

At line:1 char:15

+ ./parameter.ps1 <<<<

Hibás futás!

Ha megvan mindhárom paraméter, akkor visszaírjuk azok típusát és értékét a képernyőre, a szkript pedig egy másik értéket fog visszaadni.

PS C:\> ./parameter.ps1 egy kettő három

System.Object[]

egy

System.String

kettő

System.String

három

System.String

Jó futás!

A visszaadott érték a fenti esetekben egyszerűen a képernyőre került, de ez nem igazán erre való. Az érték segítségével a hívó szkript kaphat információt az elindított szkript belsejében történtekről. Természetesen semmi akadálya nincsen több érték visszaadásának sem (bár csak egyetlen return futhat le), szkriptünk egy tömb elemeinek képében tetszőleges számú és típusú értéket is visszaadhat.

PS C:\> $vissza = ./parameter.ps1 egy kettő három

System.Object[]

egy

System.String

kettő

System.String

három

System.String

PS C:\> $vissza

Jó futás!

Természetesen nem csak az $args változó áll rendelkezésünkre, hanem használhatunk explicit paraméterdefiníciót is. Miután a szkriptnek nincs saját, „belső” neve, hanem csak a fájlnak, amibe rakjuk, ezért a paramétereit sem tudjuk a nem létező neve mellett felsorolni, csak külön param  kulcsszó megadásával:

param ($a, $b)

$a / $b

Elmentetem a fenti, nagyon bonyolult szkriptet „osztás.ps1” néven, és meg is hívhatom, hasonlóan egy függvényhez:

[6] PS C:\old>.\osztás.ps1 20 4

5

[7] PS C:\old>.\osztás.ps1 –b 3 –a 27

9

Akár a hely szerinti, akár a név szerinti paraméterátadás is működik. Természetesen a szkript által visszaadott eredményt felhasználhatjuk értékadás során is, megint csak ugyanúgy, mintha függvény lenne:

[8] PS C:\old>$eredmény = .\osztás 50 11

[9] PS C:\old>$eredmény

4,54545454545455



Word To HTML Converter