Understanding Functions in PowerShell
ahelyett, hogy ugyanazt a kódot újra és újra átmásolná és beillesztené, hozzon létre egy PowerShell funkciót.
a PowerShell szkriptek írásának első indításakor nem feltétlenül aggódik olyan dolgok miatt, mint a modularitás, az újrafelhasználhatóság és a “legjobb gyakorlatok”.”Csak nedves a lábad. Az idő múlásával azonban hamarosan rájössz, hogy elkezdi megismételni magát kódban.
észre fogod venni, hogy ugyanazt a dolgot újra és újra meg újra meg kell tenni, egyre nagyobb lesz. Lemásolhatod és beillesztheted ugyanazt a kódot, de ez nem fenntartható. Ehelyett miért nem hoz létre kis “építőelemeket” kódban, hogy újra felhasználhatók legyenek? Ideje elkezdeni a PowerShell funkciók létrehozását.
a PowerShell függvény egy kódcsoport, amely opcionális bemenettel és kimenettel rendelkezik. Ez egy módja annak, hogy összegyűjtsünk egy csomó kódot egy vagy sok különböző alkalommal, csak rámutatva rá, ahelyett, hogy többször megismételnénk ezt a kódot.
alapvető funkciók
kétféle funkció van a PowerShellben. Van egy “alap” funkciónk és egy fejlett funkciónk. Az “alapvető” funkciók a létrehozható funkció legegyszerűbb formája. Nem rendelkeznek olyan divatos beépített képességekkel, amelyeket a fejlett funkciók végeznek. Ez létre, vagy deklarált segítségével a funkció nyilatkozatot, majd egy sor göndör nadrágtartó.
function Do-Something {}
a fenti technikailag egy olyan függvény, amelyet a Do-Something meghívásával lehet meghívni, de amint megtalálja, nem sokat tesz. Ez azért van, mert még nem tartalmaz semmilyen kódot futtatni. Adjunk hozzá néhány egyszerű kódot, hogy megbizonyosodjon arról, hogy csinál valamit. A megjelenítéshez a szöveg írása parancsot fogom használni a PowerShell konzolra.
function Do-Something {
Write-Host ‘ csináltam valamit!’
}
PS >Do-Something
csináltam valamit!
most már látható, hogy a fenti, ha hivatkoznak; fut a kód belsejében a függvény. Mi lenne, ha át szeretnénk adni valamit a funkció belsejében lévő kódba, amikor fut? Létrehozhatunk egy vagy több paramétert egy paraméterblokk belsejében.
function Do-Something {
param ($String )
Write-Host “csináltam valamit — $String!”}
PS> Do-Something-String ‘thing’
csináltam valamit — thing!
vegye figyelembe, hogy egy kötőjel hozzáadásával megadtam a karakterlánc paramétert, majd a paraméter nevét, amelyet közvetlenül a Do-Something nevű érték követ. Ez a funkciók paramétereinek átadásának alapja.
Speciális funkciók
az Alapvető funkciók működnek, de az idő nagy részében találod magad létrehozása speciális funkció. A fejlett funkciók olyan funkciók, amelyek alapfunkcióként tartalmazzák az összes funkciót, de olyan beépített funkciókkal is rendelkeznek, amelyeket az alapvető funkciók nem. Például a Powershellnek van egy fogalma a hibának, figyelmeztetésnek, Verbóznak stb. Ezek az adatfolyamok kritikusak a felhasználók kimenetének helyes megjelenítésében. Az alapvető funkciók természetüknél fogva nem értik ezeket a patakokat.
tegyük fel, hogy hibaüzenetet akarunk megjeleníteni, ha valami történik a funkció belsejében. Ugyanakkor azt is szeretnénk, hogy ezt a hibaüzenetet valamilyen okból csak bizonyos időpontokban elrejtsük. Egy alapfunkcióval ezt meg lehetne tenni. Fejlett funkcióval azonban ez a funkció közvetlenül be van építve. A speciális funkciók alapértelmezés szerint már rendelkeznek paraméterekkel, még akkor is, ha nem tartalmazza őket, mint például a Verbose, ErrorAction, WarningVariable stb. Ezeket különböző módon lehet kihasználni. Hibapéldánkban tegyük fel, hogy a kulcsszó használatával módosítottam a funkciónkat “haladó” – ra.
function Do-Something {
param ($String )
Write-Error-Message ‘Danger, Will Robinson!’
}
PS> Do-Something
do-Something: Danger, Will Robinson!
sor: 1 char:1
+ do-Something
+ ~~~~~~~~~~~~
+ CategoryInfo : Notspeified: (:) ,
WriteErrorException
+ FullyQualifiedErrorId :
Microsoft.PowerShell.Parancsok.WriteErrorException, Do-Something
Ha ez fut, akkor azonnal megjelenik a piros szöveg, amely azt jelzi, hogy jött a hiba stream. Most hallgassuk el ezt a hibát.
Do-Something-ErrorAction SilentlyContinue
az ErrorAction paraméter csak egy beépített paraméter minden fejlett funkciónál. Sokkal több van a PowerShell funkciókban, nem volt időnk fedezni. A teljes bontást mindent, amit a speciális funkciók tehetünk az Ön számára, lásd a about_advanced_functions Súgó téma.