functies komen veel voor in PowerShell en om de PowerShell taal echt te begrijpen, is het belangrijk dat u weet hoe functies werken. In dit artikel gaan we laten zien hoe een PowerShell functie evolueert van in principe niets helemaal naar het hebben van parameters met behulp van validatiekenmerken.
om dit aan te tonen, beginnen we eerst met een functie die niet eenvoudiger kan worden.
function Write-Log {
param()
}
wanneer deze functie binnen een PowerShell-sessie wordt uitgevoerd, zal deze functie worden uitgevoerd, maar zal deze niets doen omdat er geen code is om uit te voeren. PowerShell voert gewoon de functie zelf uit en geeft terug.
om de functie daadwerkelijk iets te laten doen, moeten we wat code toevoegen. Code wordt toegevoegd tussen het param blok en de laatste krullende brace. Je kunt hieronder zien dat ik mijn schrijf-Log functie de string “ik heb iets gedaan” terug naar de console.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
onze functie wordt Write-Log genoemd, dus ik neem aan dat dit een functie zal zijn die uiteindelijk een soort tekst naar een logbestand zal schrijven. Omdat we niet elke keer hetzelfde naar een logbestand willen schrijven, moeten we een manier bieden om het bericht te wijzigen wanneer de functie wordt uitgevoerd. Om dat te doen, zullen we een parameter toevoegen. Parameters staan de gebruiker toe om verschillende waarden in de functie tijdens run-time door te geven. Dit staat de functie toe om dynamische input tijdens runtime te verzamelen.
om een parameter toe te voegen, zal ik een variabele toevoegen. In dit geval wordt de variabele bericht genoemd. Ik zal het toevoegen aan de binnenkant van de param block zoals hieronder weergegeven. Je kunt dan zien dat ik die parameter in de functie zelf kan refereren. Wanneer uitgevoerd, zal de functie de waarde teruggeven die ik aan de Berichtparameter doorgeef.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
u hoeft niet bij één parameter te stoppen. We kunnen hier zoveel toevoegen als we willen. Hieronder, Ik ben het toevoegen van een Ernst parameter, het verstrekken van een waarde wanneer de functie wordt uitgevoerd en je kunt zien dat het hetzelfde gedrag vertoont.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
nu we weten hoe we met parameters moeten omgaan, kunnen we in parametertypes komen. Een parameter heeft een type net als alles in PowerShell. Boven gebruikte hij een type, maar hij accepteerde elk denkbaar object. De parameter is niet expliciet getypt. Het is een goede praktijk om dit te doen op alle parameters om ervoor te zorgen dat alleen de waarden die u verwacht worden doorgegeven.
om een type te definiëren, kunnen we het type tussen vierkante haakjes toevoegen vlak voordat de parameter wordt gedeclareerd.
function Write-Log {
param($Message)
$Message
}
zodra een expliciet type is toegewezen aan de parameter, accepteert PowerShell alleen invoer van dat type of een object dat het kan converteren. In dit voorbeeld hieronder geef ik de Booleaanse waarde $false door aan de Message parameter. Je kunt zien dat PowerShell dit niet toestaat. Dit is omdat het een Booleaans type niet kan converteren naar een ServiceController type.
echter, als we een servicecontroller object passeren dat Get-Service retourneert, werkt het prima.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
We kunnen ook parameterattributen gebruiken. Parameterattributen stellen ons in staat om verschillende kenmerken van elke parameter te definiëren die bepaalt hoe het werkt. In het voorbeeld hieronder gebruik ik de verplichte parameter. Deze attributen dwingen de gebruiker om een waarde door te geven aan de Berichtparameter anders zal de functie niet draaien.
Ik stel ook een standaardwaarde in voor de parameter Ernst. Dit staat me toe om de ernst te forceren om altijd 1 te zijn, tenzij het tijdens het draaien wordt overschreven door een waarde aan die parameter door te geven.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
tenslotte kunnen we parametervalidatiekenmerken gebruiken. Parametervalidatie attributen zijn een geweldige manier om te beperken welke waarden worden doorgegeven aan een parameter. In het voorbeeld hieronder gebruik ik het validaterange() validation attribuut. Dit kenmerk wordt gebruikt op parameters van het type integer om een bereik van toegestane getallen te definiëren. In dit voorbeeld laat ik alleen waarden van Ernst 1-5 zijn. Elke andere waarde die niet binnen dat bereik valt, zal falen.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
Wrap Up
nu moet u een basiskennis hebben van hoe functies werken in PowerShell. We hebben alles besproken wat je moet weten om aan de slag te gaan met het bouwen van nuttige functies in PowerShell. Ik moedig u aan om te beginnen met het opmerken van tijden in uw scripts waar een functie nuttig zou zijn en beginnen buiding hen. U zult zien na verloop van tijd dat uw code schoner en veel gemakkelijker te lezen zal worden.