funktioner är en vanlig förekomst i PowerShell och för att verkligen förstå PowerShell-språket är det viktigt att du vet hur funktioner fungerar. I den här artikeln kommer vi att visa hur en PowerShell-funktion utvecklas från i princip ingenting hela vägen till att ha parametrar med valideringsattribut.
för att visa detta, låt oss först börja med en funktion som inte kan bli enklare.
function Write-Log {
param()
}
När den körs inuti en PowerShell-session kommer den här funktionen att köras men gör ingenting eftersom det inte finns någon kod att köra. PowerShell utför helt enkelt själva funktionen och returnerar.
för att funktionen faktiskt ska göra något måste vi lägga till lite kod. Kod läggs in mellan param blocket och den sista lockigt stag. Du kan se nedan att jag gör min Skrivloggfunktion returnera strängen” jag gjorde något ” till konsolen.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
vår funktion kallas Skrivlogg så jag antar att detta kommer att vara en funktion som så småningom kommer att skriva någon form av text till en loggfil. Eftersom vi inte vill skriva samma sak till en loggfil varje gång måste vi ge något sätt att ändra meddelandet när funktionen körs. För att göra det lägger vi till en parameter. Parametrar tillåter användaren att skicka olika värden till funktionen vid körning. Detta gör att funktionen kan samla dynamisk inmatning vid körning.
för att lägga till en parameter lägger jag till en variabel. I detta fall kallas variabeln meddelande. Jag lägger till det inuti param-blocket som visas nedan. Du kan sedan se att jag kan referera till den parametern inuti själva funktionen. Vid körning returnerar funktionen vilket värde jag skickar till meddelandeparametern.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
du behöver inte stanna vid bara en parameter. Vi kan lägga till så många vi vill här. Nedan lägger jag till en Allvarlighetsparameter som ger ett värde när funktionen körs och du kan se att den uppvisar samma beteende.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
Nu när vi vet hur man hanterar parametrar kan vi komma in i parametertyper. En parameter har en typ precis som allt annat i PowerShell. Ovan använde den en typ men den accepterade alla typer av föremål som var tänkbara. Parametern skrevs inte uttryckligen. Det är bra att göra detta på alla parametrar för att säkerställa att endast de värden du förväntar dig passeras.
för att definiera en typ kan vi lägga till typen i hakparenteser precis innan parametern deklareras.
function Write-Log {
param($Message)
$Message
}
När en explicit typ har tilldelats parametern accepterar PowerShell endast inmatning av den typen eller ett objekt som det kan konvertera. I det här exemplet nedan skickar jag det booleska värdet $false till Meddelandeparametern. Du kan se att PowerShell inte tillåter det. Detta beror på att det inte kan konvertera en boolesk typ till en ServiceController-typ.
men om vi skickar ett ServiceController-objekt som Get-Service returnerar, fungerar det bara bra.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
Vi kan också använda parameterattribut. Parameterattribut tillåter oss att definiera olika egenskaper för varje parameter som bestämmer hur det fungerar. I exemplet nedan använder jag den obligatoriska parametern. Dessa attribut tvingar användaren att skicka ett värde till meddelandeparametern, annars körs inte funktionen.
Jag ställer också in ett standardvärde på Allvarlighetsparametern. Detta gör att jag kan tvinga svårighetsgrad att alltid vara 1 om det inte åsidosätts vid körtid genom att skicka ett värde till den parametern.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
slutligen kan vi använda parametervalideringsattribut. Parametervalideringsattribut är ett bra sätt att begränsa vilka värden som skickas till en parameter. I exemplet nedan använder jag valideringsattributet ValidateRange (). Detta attribut används på parametrar av typ heltal för att definiera ett intervall av tillåtna tal. I det här exemplet tillåter jag bara värden av svårighetsgrad att vara 1-5. Något annat värde som inte ligger inom detta område kommer att misslyckas.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
avsluta
nu borde du ha en grundläggande förståelse för hur funktioner fungerar i PowerShell. Vi har täckt allt du behöver veta för att komma igång med att bygga användbara funktioner i PowerShell. Jag uppmuntrar dig att börja märka tider i dina skript där en funktion skulle vara användbar och börja buiding dem. Du ser med tiden att din kod blir renare och mycket lättare att läsa.