Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door Yoeri Lauwers

Eindredacteur

Een introductie tot Windows PowerShell

Werken met variabelen

Aangezien het vaak nuttig kan zijn resultaten van commando's tussentijds bij te houden om die wat verder in een script opnieuw te gebruiken, vormen variabelen een onmisbaar onderdeel in elke script- en programmeertaal. Tijdens het werken met de Powershell kunnen variabelen herkend worden aan de $ die de naam voorafgaat. In de uitdrukking $lengte = "Lente van de tekst".length is $lengte dan ook de variabele waarin het resultaat van de expressie na het gelijkheidsteken opgeslagen wordt. Het is overigens niet nodig een variabele voor gebruik te definiëren. Een constructie als Dim lengte as Integer uit VBScript is dan ook overbodig geworden. De Powershell-interpreter herkent het dollarteken automatisch en bepaalt op basis van de waarde die in de variabele opgeslagen wordt om welk type het gaat. De naam van de variabele eindigt bij het eerste zogenaamde 'word breaking character'. Dit kan een spatie, een punt of een komma zijn. Als men toch dergelijke tekens in de naam van de variabele wil gebruiken, is het mogelijk de naam tussen accolades te plaatsen.

PS> $stringVariable = "This is a string"
PS> $stringVariable
This is a string
PS> $!@#$%^&*() = "This is a non-traditional variable name"
Invalid variable reference. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.
At line:1 char:1
+ $  ${!@#$%^&*()} = "This is a non-traditional variable name"
PS> ${!@#$%^&*()}
This is a non-traditional variable name

Een aantal variabelenamen zijn echter gereserveerd door de Powershell. Het gaat daarbij onder andere om variabelen die gebruikt kunnen worden om de werking van de Powershell te controleren. In de onderstaande tabel zijn een aantal van die variabelen opgenomen.

Variabelenaam Beschrijving
$^ Bevat het eerste teken van de laatste lijn die ingevoerd werd in de shell.
$$ Bevat het laatste teken van de laatste lijn die ingevoerd werd in de shell.
$_ Het huidige object in de pipeline; kan onder andere gebruikt worden in scripts, filters, where-clausules en switch-statements.
$? Bevat de 'success/fail'-status van het laatst uitgevoerde statement.
$Args Wordt gebruikt bij het creëren van functies die parameters vereisen.
$Error Bevat de laatste error die gegenereerd werd tijdens het uitvoeren van een statement.
$foreach Verwijst naar de enumerator in een foreach-lus.
$HOME The homedirectorie van de gebruiker; verwijst naar %HOMEDRIVE%\%HOMEPATH%.
$true Boolean 'waar'
$false Boolean 'vals'
$null Een null-object.
* Types variabelen en werken met arrays

Zoals hierboven al aangegeven wordt, is het in Powershell-scripts niet nodig om variabelen te definiëren, maar wordt het variabeletype automatisch bepaald aan de hand van de gegevens die erin opgeslagen worden. Zo zal $intVar = 123 resulteren in een integer, terwijl $strVar = "Hello World" een string tot resultaat zal hebben. De verregaande integratie van .NET heeft tot gevolg dat zowat elk type variabele uit .NET ook in Powershell bruikbaar is: array, bool, byte, char, char[], decimal, double, float, int, int[], long, long[], regex, single, scriptblock, string, type en xml. Omdat het in bepaalde gevallen wenselijk is zelf te kunnen bepalen welk type een bepaalde variabele zal worden, is er ook een casting-mogelijkheid ingebouwd. In de volgende twee voorbeelden wordt er bijvoorbeeld voor gekozen om de strings respectievelijk als integer en als xml-variabele te bewaren:

PS> $a=[int]"4"
PS> $a=[xml]"<parentitem><childitem>Hello </childitem><childitem>World</childitem></parentitem>"

Voor het creëren van een array volstaat het de verschillende waarden in te voeren, gescheiden door een komma. Het terughalen van een specifieke waarde uit een array gebeurt met behulp van de index, waarbij de eerste waarde index 0 heeft.

PS> $array = 1, 2, 3, "test"
PS> $array[3]
test

Om te achterhalen welke functies en properties beschikbaar zijn bij een bepaald object of variabeletype is er het commando Get-Member.

PS> "Dit is een string" | Get-Member


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value),...
Contains         Method                System.Boolean Contains(String value)
CopyTo           Method                System.Void CopyTo(Int32 sourceIndex,...
EndsWith         Method                System.Boolean EndsWith(String value)...
Equals           Method                System.Boolean Equals(Object obj), Sy...
...
* Conditionele statements en rekenkundige operatoren

Als men een waarde opgeslagen heeft in een variabele, is het natuurlijk de bedoeling om daar wat mee te gaan doen. Vaak zal men deze waarden met elkaar willen vergelijken of er bewerkingen mee uitvoeren en ook daar is de Powershell op voorzien. Aangezien de Powershell-syntax heel wat aspecten van C# geleend heeft, zullen programmeurs zich al gauw thuisvoelen in deze omgeving.

Operator Beschrijving
= Kent de waarde van het argument toe aan de variabele.
+= Telt de waarde van het argument op bij de waarde van de variabele en slaat het resultaat op in de variabele.
-= Trekt de waarde van het argument af van d waarde van de variabele en slaat het resultaat op in de variabele.
*= Vermenigvuldigt de waarde van het argument met de variabele en slaat het resultaat op in de variabele.
/= Deelt de waarde van de variabele door het argument en slaat het resultaat op in de variabele.
%= Slaat de rest van de deling van de variabele door het argument op in de variabele

Vanzelfsprekend kunnen de operatoren +, -, *, / en % ook gebruikt worden in gewone expressies als $som = 1 + 2 * 3. Daarnaast kunnen $teller++ en $teller-- gebruikt worden om de variabele $teller respectievelijk te verhogen en te verlagen. Ook voor het vergelijken van variabelen zijn overigens een aantal operatoren voorzien. Door de letter c toe te voegen voor onderstaande operatoren, wordt de conditie hoofdlettergevoelig gemaakt, bijvoorbeeld -clt voor de hoofdlettergevoelige versie van -lt.

Operator Beschrijving
-lt Kleiner dan
-le Kleiner dan of gelijk aan
-gt Groter dan
-ge Groter dan of gelijk aan
-eq Gelijk aan
-ne Niet gelijk aan
-contains Gaat na of het argument na de operator voorkomt in het argument voor de operator
-notcontains Controleert of het argument na de operator niet voorkomt in het argument voor de operator
-like Vergelijkbaar met -eq, maar kan wildcards verwerken.
-notlike Vergelijkbaar met -ne, maar kan wildcards verwerken
-match Controleert of het argument voldoet aan een reguliere expressie
-notmatch Gaat na of het argument niet voldoet aan een reguliere expressie

Wat vind je van dit artikel?

Geef je mening in het Geachte Redactie-forum.

Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True