Funksjoner er en vanlig forekomst I PowerShell, og for å virkelig forstå PowerShell-språket, er det viktig at du vet hvordan funksjoner fungerer. I denne artikkelen skal vi vise hvordan En PowerShell-funksjon utvikler seg fra i utgangspunktet ingenting helt til å ha parametere ved hjelp av valideringsattributter.
for å demonstrere dette, la oss først starte med en funksjon som ikke kan bli enklere.
function Write-Log {
param()
}
når du kjører inne I En PowerShell-økt, vil denne funksjonen utføre, men vil ikke gjøre noe fordi det ikke er noen kode å utføre. PowerShell utfører bare funksjonen selv og returnerer.
for at funksjonen faktisk skal gjøre noe, må vi legge til litt kode. Koden er lagt i mellom param blokken og den siste krøllete spenne. Du kan se nedenfor at jeg lager Min Skriveloggfunksjon, returnerer strengen «jeg gjorde noe» til konsollen.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
vår funksjon kalles Skrivelogg, så jeg antar at dette vil være en funksjon som til slutt vil skrive en slags tekst til en loggfil. Fordi vi ikke vil skrive det samme til en loggfil hver gang, må vi gi noen måte å endre meldingen når funksjonen kjører. For å gjøre det, vil vi legge til en parameter. Parametre tillater brukeren å passere forskjellige verdier inn i funksjonen under kjøring. Dette gjør at funksjonen kan samle dynamisk inngang under kjøring.
for å legge til en parameter, legger jeg til en variabel. I dette tilfellet kalles variabelen Melding. Jeg legger den inn i param-blokken som vist nedenfor. Du kan da se at jeg kan referere til den parameteren inne i selve funksjonen. Når du kjører, returnerer funksjonen hvilken verdi jeg overfører Til Meldingsparameteren.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
du trenger ikke å stoppe ved bare en parameter. Vi kan legge til så mange vi vil her. Nedenfor legger jeg Til En Alvorlighetsparameter, som gir en verdi når funksjonen kjøres, og du kan se at den viser samme oppførsel.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
Nå som vi vet hvordan vi skal håndtere parametere, kan vi komme inn i parametertyper. En parameter har en type akkurat som alt annet I PowerShell. Over, det var å bruke en type, men det akseptert noen form for objekt tenkelig. Parameteren ble ikke eksplisitt skrevet. Det er god praksis å gjøre dette på alle parametere for å sikre at bare verdiene du forventer er bestått.
for å definere en type, kan vi legge til typen i hakeparenteser rett før parameteren deklareres.
function Write-Log {
param($Message)
$Message
}
Når en eksplisitt type er tilordnet parameteren, Vil PowerShell bare godta inndata av den typen eller et objekt som Den kan konvertere. I dette eksemplet nedenfor overfører jeg den boolske verdien $false Til Meldingsparameteren. Du kan se At PowerShell ikke tillater det. Dette skyldes at den ikke kan konvertere en boolsk type til En ServiceController-type.
men hvis vi passerer Et ServiceController-objekt som Får Service tilbake, fungerer det bra.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
Vi kan også bruke parameterattributter. Parameterattributter tillater oss å definere forskjellige egenskaper for hver parameter som bestemmer hvordan det fungerer. I eksemplet nedenfor bruker jeg den Obligatoriske parameteren. Disse attributtene tvinger brukeren til å sende en verdi Til Meldingsparameteren ellers vil funksjonen ikke kjøre.
jeg setter også en standardverdi på Alvorlighetsparameteren. Dette tillater Meg å tvinge Alvorlighetsgrad til alltid å være 1 med mindre det overstyres ved kjøring ved å sende en verdi til den parameteren.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
Til Slutt kan vi bruke parametervalideringsattributter. Parametervalideringsattributter er en fin måte å begrense hvilke verdier som sendes til en parameter. I eksemplet nedenfor bruker jeg Valideringsattributtet () validering. Dette attributtet brukes på parametere av typen heltall for å definere et område med tillatte tall. I dette eksemplet tillater jeg bare Verdier Av Alvorlighetsgrad å være 1-5. Enhver annen verdi som ikke er i dette området vil mislykkes.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
Pakk opp
nå bør du ha en grunnleggende forståelse av hvordan funksjoner fungerer I PowerShell. Vi har dekket alt du trenger å vite for å komme i gang med å bygge nyttige funksjoner I PowerShell. Jeg oppfordrer deg til å begynne å merke ganger i skriptene dine der en funksjon vil være nyttig og begynne å bygge dem. Du vil se over tid at koden din blir renere og mye lettere å lese.