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