funcțiile sunt un eveniment comun în PowerShell și pentru a înțelege cu adevărat limba PowerShell, este important să știți cum funcționează funcțiile. În acest articol, vom arăta cum evoluează o funcție PowerShell de la practic nimic până la a avea parametri folosind atribute de validare.
pentru a demonstra acest lucru, să începem mai întâi cu o funcție care nu poate fi mai simplă.
function Write-Log {
param()
}
când se execută în interiorul unei sesiuni PowerShell, această funcție se va executa, dar nu va face nimic, deoarece nu există cod de executat. PowerShell execută pur și simplu funcția în sine și se întoarce.
pentru ca funcția să facă ceva, trebuie să adăugăm un cod. Codul este adăugat între blocul param și ultima bretele cret. Puteți vedea mai jos că îmi fac funcția de jurnal de scriere să returneze șirul „am făcut ceva” la consolă.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
funcția noastră se numește Write-Log, așa că presupun că aceasta va fi o funcție care va scrie în cele din urmă un fel de text într-un fișier jurnal. Deoarece nu vom dori să scriem același lucru într-un fișier jurnal de fiecare dată, trebuie să oferim o modalitate de a schimba mesajul atunci când funcția rulează. Pentru a face acest lucru, vom adăuga un parametru. Parametrii permit utilizatorului să transmită diferite valori în funcție în timpul rulării. Aceasta permite funcției să adune intrări dinamice în timpul rulării.
pentru a adăuga un parametru, voi adăuga o variabilă. În acest caz, variabila se numește mesaj. O voi adăuga în interiorul blocului param așa cum se arată mai jos. Puteți vedea apoi că pot face referire la acel parametru în interiorul funcției în sine. Când rulați, funcția va returna orice valoare trec la parametrul mesajului.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
nu trebuie să vă opriți la un singur parametru. Putem adăuga cât de multe dorim aici. Mai jos, adaug un parametru de severitate, oferind o valoare atunci când funcția este rulată și puteți vedea că prezintă același comportament.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
acum că știm cum să gestionăm parametrii, putem intra în tipurile de parametri. Un parametru are un tip la fel ca orice altceva în PowerShell. Mai sus, folosea un tip, dar accepta orice fel de obiect imaginabil. Parametrul nu a fost tastat în mod explicit. Este o practică bună să faceți acest lucru pe toți parametrii pentru a vă asigura că sunt transmise doar valorile pe care le așteptați.
pentru a defini un tip, putem adăuga tipul în paranteze pătrate chiar înainte ca parametrul să fie declarat.
function Write-Log {
param($Message)
$Message
}
odată ce un tip explicit este atribuit parametrului, PowerShell va accepta doar intrarea acelui tip sau a unui obiect pe care îl poate converti. În acest exemplu de mai jos, trec valoarea booleană $false la parametrul mesajului. Puteți vedea că PowerShell nu va permite acest lucru. Acest lucru se datorează faptului că nu poate converti un tip boolean într-un tip ServiceController.
cu toate acestea, dacă trecem un obiect ServiceController care returnează Get-Service, funcționează foarte bine.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
putem folosi și atributele parametrilor. Atributele parametrilor ne permit să definim diferite caracteristici ale fiecărui parametru care determină modul în care funcționează. În exemplul de mai jos, folosesc parametrul obligatoriu. Aceste atribute obligă utilizatorul să transmită o valoare parametrului mesajului, altfel funcția nu va rula.
de asemenea, setez o valoare implicită pentru parametrul de severitate. Acest lucru îmi permite să forțez severitatea să fie întotdeauna 1, cu excepția cazului în care este înlocuită în timpul rulării prin trecerea unei valori la acel parametru.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
În cele din urmă, putem folosi atribute de validare a parametrilor. Atributele de validare a parametrilor sunt o modalitate excelentă de a restricționa ce valori sunt transmise unui parametru. În exemplul de mai jos, folosesc atributul ValidateRange() validation. Acest atribut este utilizat pe parametrii de tip întreg pentru a defini o gamă de numere permise. În acest exemplu, permit doar valorile severității să fie 1-5. Orice altă valoare care nu se află în acest interval va eșua.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
Wrap Up
până acum ar trebui să aveți o înțelegere de bază a modului în care funcționează funcțiile în PowerShell. Am acoperit tot ce trebuie să știți pentru a începe să construiți funcții utile în PowerShell. Vă încurajez să începeți să observați momente în scripturile dvs. în care o funcție ar fi utilă și să începeți să le construiți. Veți vedea în timp că codul dvs. va deveni mai curat și mult mai ușor de citit.