Hoofdcategorieën
Device Settings

Een introductie tot Windows PowerShell

Door Yoeri Lauwers, dinsdag 19 september 2006 13:51, views: 181.474

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"
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

Volgende pagina (Het hoe en wat van Cmdlets - 5/13)


Inhoudsopgave

VNU Media logo Hosted by True

© 1998 - 2012 Tweakers.net B.V. - Alle rechten voorbehouden - Contact - Jouw privacy - Algemene Voorwaarden

Uitgever van:

Website van het jaar 2011