înțelegerea funcțiilor în PowerShell
în loc să copiați și să lipiți același cod din nou și din nou, creați o funcție PowerShell.
când începeți să scrieți scripturi PowerShell, nu sunteți neapărat preocupat de lucruri precum modularitatea, reutilizarea și „cele mai bune practici”.”Doar îți uzi picioarele. Cu toate acestea, odată cu trecerea timpului, veți realiza în curând că începeți să vă repetați în cod.
veți observa că nevoia de a face același lucru de peste si peste tot tot mai mare. Puteți copia și lipi același cod, dar nu este durabil. În schimb, de ce să nu creați mici „blocuri de construcție” în cod, astfel încât să poată fi reutilizate? Este timpul să începeți să creați funcții PowerShell.
o funcție în PowerShell este o grupare de cod care are o intrare și o ieșire opționale. Este o modalitate de a colecta o grămadă de cod pentru a efectua una sau mai multe ori diferite, doar arătând spre el în loc să duplicați acel cod în mod repetat.
funcții de bază
există două tipuri de funcții în PowerShell. Avem o funcție” de bază ” și o funcție avansată. Funcțiile „de bază” sunt cea mai simplă formă a unei funcții care poate fi creată. Nu au niciuna dintre capabilitățile încorporate fanteziste pe care le au funcțiile avansate. Acesta este creat sau declarat folosind declarația funcție urmată de un set de acolade buclat.
funcția do-Something {}
de mai sus este tehnic o funcție care poate fi apoi apelată invocând Do-Something, dar, după cum veți găsi, nu face prea mult. Acest lucru se datorează faptului că nu am inclus nici un cod în interiorul pentru a rula. Să adăugăm un cod simplu în interior pentru a ne asigura că face ceva. Pentru a demonstra, voi folosi comanda Write-Host care scrie text în consola PowerShell.
funcția Do-Something {
scrie-gazdă ‘ am făcut ceva!’
}
PS > Fă ceva
am făcut ceva!
acum Puteți vedea mai sus că, atunci când a invocat; se execută codul în interiorul funcției. Ce se întâmplă dacă am dori să treacă ceva în codul din interiorul funcției atunci când se execută? Putem crea unul sau mai mulți parametri în interiorul unui bloc de parametri.
funcția Do-Something {
param ($String )
scrie-gazdă „am făcut ceva – $ String!”}
PS> face-ceva-șir „lucru”
am făcut ceva-lucru!
observați că am specificat parametrul șir adăugând o liniuță urmată de numele parametrului urmat de valoarea imediat după ce am sunat Do-Something. Acestea sunt elementele de bază ale trecerii parametrilor la funcții.
funcții avansate
funcțiile de bază funcționează, dar de cele mai multe ori vă veți găsi creând funcții avansate. Funcțiile avansate sunt funcții care includ toate funcționalitățile ca funcții de bază, dar vin și cu unele funcții încorporate pe care funcțiile de bază nu le au. De exemplu, PowerShell are un concept de fluxuri numit eroare, avertizare, Verbose etc. Aceste fluxuri sunt critice în afișarea corectă a ieșirii către utilizatori. Funcțiile de bază nu înțeleg în mod inerent aceste fluxuri.
Să presupunem că vrem să afișăm un mesaj de eroare dacă se întâmplă ceva în interiorul funcției. Cu toate acestea, dorim și capacitatea de a ascunde acest mesaj de eroare dintr-un anumit motiv doar în anumite momente. Cu o funcție de bază, ar fi kludgy pentru a face acest lucru. Cu toate acestea, cu o funcție avansată, această funcționalitate este construit chiar în. Funcțiile avansate, în mod implicit, au deja parametri, chiar dacă nu le includeți, cum ar fi Verbose, ErrorAction, WarningVariable și așa mai departe. Acestea pot fi valorificate în diferite moduri. În exemplul nostru de eroare, să presupunem că am modificat funcția noastră pentru a fi „avansată” folosind cuvântul cheie.
funcția Do-Something {
param( $String)
scrie-eroare-mesaj ‘pericol, va Robinson!’
}
PS > Do-Something
Do-Something : pericol, va Robinson!
la linia: 1 char: 1
+ face-ceva
+ ~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) ,
WriteErrorException
+ FullyQualifiedErrorId :
Microsoft.PowerShell.Comenzi.WriteErrorException, do-Something
când acest lucru este rulat, veți vedea imediat textul roșu care indică faptul că a venit din fluxul de eroare. Să tăcem acum această eroare.
Do-Something-ErrorAction SilentlyContinue
parametrul ErrorAction este doar un parametru încorporat pentru fiecare funcție avansată. Există mult mai multe funcții PowerShell pe care nu am avut timp să le acoperim. Pentru o defalcare completă a tot ceea ce pot face funcțiile avansate pentru dvs., consultați subiectul de ajutor about_advanced_functions.