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

Parsing Modes

Powershell is in staat om opdrachten en scripts in twee verschillende modes te parsen: command mode en expression mode. Expression mode is vergelijkbaar met de meeste high-level programmeertalen, waarbij getallen beschouwd worden als numerieke gegevens en strings tussen quotes geplaatst moeten worden. Expressions zien er als volgt uit:

PS> 2+2
4
PS> "Hello " + "world"
Hello world
PS> $a = "hi"
PS> $a.length
2

In command mode is het niet nodig strings tussen aanhalingstekens te plaatsen, maar worden enkel variabelen - voorafgegaan door een $-teken - en tekst tussen haakjes niet als string beschouwd. Enkele voorbeelden hiervan zijn:

PS> copy bron.txt doel.txt
PS> write-host 2+2
2+2
PS> copy $src $dest

Dit biedt als belangrijk voordeel dat het mogelijk is heel wat typwerk te sparen wanneer men in command mode werkt. Er schuilen echter ook gevaren in deze modus, vooral wanneer men met Boolean-variabelen werkt. Het toekennen van een willekeurige string zal, zoals ervaren programmeurs weten, immers resulteren in de waarde 'True', zelfs als deze string de tekst 'False' bevat. Men is dus verplicht gebruik te maken van de variabelen $True en $False. In welke parsing mode gewerkt wordt, wordt bepaald door het eerste teken van de opdracht. Wanneer de lijn begint met een getal, een variabele of een string tussen dubbele aanhalingstekens, wordt expression mode gebruikt. Command mode wordt ingeschakeld als het eerste teken een ampersand (&), een punt gevolgd door een spatie, of een ander karakter is.

ExpressieEvaluatieParsing mode
2+2Begint met een getalExpression mode
"Hello World"Begint met een string tussen dubbele quotesExpression mode
Hello WorldBegint met een letterCommand mode
& "Hello World"Begint met een ampersandCommand mode
. "script.ps1"Begint met een punt gevolgd door een spatieCommand mode
.123Begint met een punt gevolgd door een getalExpression mode
.HelloWorldDe punt is onderdeel van de naam '.HelloWorld'Command mode
* Providers

Niet alleen de commando's en de te verwerken gegevens worden als objecten behandeld, maar ook de zogenaamde 'data storage'. In de meeste gevallen zullen de gegevens waarmee gewerkt wordt op de harde schijf bewaard worden en zal er dus een bestandssysteem aan te pas komen. Het principe van hiërarchische opslag, waarbij directories op hun beurt zowel andere directories als bestanden kunnen bevatten, is algemeen bekend en is zo handig gebleken dat in *nix-systemen zelfs virtuele directories als /proc en /dev in het leven geroepen werden. Om zo hardware op een generieke manier aan te kunnen spreken, net zoals directory's en bestanden aangesproken kunnen worden. Dit fenomeen is ook terug te vinden in Powershell, met name in de providers.

Voor elke denkbare hiërarchische opslagmogelijkheid kan een provider geschreven worden die deze locatie toegankelijk maakt. Met een aantal standaardcommando's of Cmdlets kan met deze providers gecommuniceerd worden, zonder dat specifieke kennis van het onderliggende opslagsysteem benodigd is. Gegevens in het Windows-register zijn bijvoorbeeld eenvoudig toegankelijk via een provider die 'Subkeys' voorstelt als directories en waarbij de combinatie van een sleutel en zijn waarde voorgesteld wordt als eigenschap of property van de Subkey.

PS> dir HKCU:


Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC VC Name Property
--- -- ---- --------
2 0 AppEvents {}
0 31 Console {ColorTable00, ColorTable01, ColorTab...
26 1 Control Panel {Opened}
0 3 Environment {TEMP, TMP, ULTRAMON_LANGDIR}
1 6 Identities {Identity Ordinal, Migrated5, Last Us...
4 0 Keyboard Layout {}
1 0 Network {}
4 1 Printers {DeviceOld}
61 1 Software {(default)}
0 0 UNICODE Program Groups {}
2 0 Windows 3.1 Migration Status {}
0 1 SessionInformation {ProgramCount}
0 7 Volatile Environment {LOGONSERVER, CLIENTNAME, SESSIONNAME...

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