PowerShell code: duidelijke uitleg en voorbeelden

Wat is PowerShell

PowerShell is een taakautomatiseringsframework en commandoregelomgeving van Microsoft. Het is gebouwd op het .NET-platform en ontworpen om systeembeheertaken te automatiseren via scripts. PowerShell combineert de kracht van een commandoregel met de flexibiliteit van een scripttaal, waardoor het ideaal is voor zowel eenvoudige administratieve taken als complexe automatisering. Oorspronkelijk werd PowerShell in 2003 ontwikkeld onder de codenaam Monad, in 2006 omgedoopt tot Windows PowerShell en in 2016 open-source uitgebracht als PowerShell Core onder de MIT-licentie. Sindsdien draait PowerShell niet alleen op Windows, maar ook op Linux en macOS. Dit maakt het een veelzijdig hulpmiddel voor beheerders in heterogene omgevingen.

PowerShell werkt met cmdlets, lichtgewicht opdrachten die specifieke functies uitvoeren. Elke cmdlet volgt de naamgevingsconventie Werkwoord-Zelfstandig, zoals Get-Process, Set-Location of New-Item. Deze consistentie maakt het eenvoudig om te voorspellen welke cmdlet je nodig hebt. Daarnaast ondersteunt PowerShell object-gebaseerde pijplijnen: in plaats van platte tekst door te geven, worden gestructureerde .NET-objecten van de ene cmdlet naar de andere gestuurd. Hierdoor kun je eigenschappen filteren, sorteren of aanpassen zonder dat je ingewikkelde parsers nodig hebt.

Basisprincipes van PowerShell code

Een PowerShell-script is een tekstbestand met de extensie .ps1. Het bevat een reeks cmdlets, variabelen, loops en conditionele logica. De shell leest het script regel voor regel en voert elke opdracht uit. Variabelen worden aangeduid met een dollarteken, bijvoorbeeld $naam. Je kunt er een waarde aan toekennen zoals $naam = "Gebruiker1". PowerShell ondersteunt alle gangbare datatypen: strings, integers, booleans, arrays en hashtabellen.

De pijplijn is een van de krachtigste concepten in PowerShell. Door het pipe-symbool | te gebruiken, stuur je de uitvoer van de ene cmdlet naar de volgende. Zo kun je een lijst processen opvragen en deze direct filteren:

Get-Process | Where-Object { $_.CPU -gt 100 }

PowerShell code: duidelijke uitleg en voorbeelden - 1

In dit voorbeeld worden alleen processen getoond waarvan het CPU-gebruik hoger is dan 100. Dankzij de objecten kun je eenvoudig doorsturen naar bijvoorbeeld Export-Csv of Select-Object.

Veelgebruikte cmdlets en hun toepassingen

Hieronder vind je een overzicht van enkele essentiële cmdlets die elke PowerShell-gebruiker zou moeten kennen. Ze dekken de meest voorkomende systeembeheertaken.

  • Get-Help: toont ingebouwde documentatie voor elke cmdlet.
  • Get-Process: lijst alle actieve processen met eigenschappen zoals CPU en geheugen.
  • Get-Service: geeft de status van Windows-services weer (Running, Stopped).
  • Set-Location: navigeert door mappen (vergelijkbaar met cd).
  • Get-EventLog: leest gebeurtenissen uit het Windows-logboek.
  • Set-ExecutionPolicy: bepaalt welke scripts mogen worden uitgevoerd (beveiligingsmaatregel).
  • Get-ADUser: haalt gebruikers op uit Active Directory (vereist de AD-module).
  • Get-ADComputer: haalt computerobjecten op uit Active Directory.

Naast deze cmdlets zijn er honderden andere modules beschikbaar, zowel van Microsoft als van derden. PowerShell herkent ook aliassen; zo is gsv een alias voor Get-Service. Je kunt zelf aliassen maken met New-Alias.

Voorbeeld: een tabel met cmdlets en hun functie

Om het overzicht te verduidelijken, volgt een tabel met een aantal belangrijke cmdlets, hun doel en een beknopt voorbeeld van gebruik.

CmdletDoelVoorbeeld
Get-ProcessActieve processen tonenGet-Process -Name notepad
Get-ServiceServices en hun status weergevenGet-Service | Where-Object { $_.Status -eq 'Running' }
Set-ExecutionPolicyScriptuitvoeringsbeleid instellenSet-ExecutionPolicy RemoteSigned
Get-ADUserAD-gebruikers opvragen met filtersGet-ADUser -Filter {Enabled -eq $true}
Get-EventLogLogboekitems lezenGet-EventLog -LogName System -Newest 10

Met deze cmdlets kun je al een groot deel van de dagelijkse beheertaken uitvoeren. Het mooie is dat je ze kunt combineren in scripts om complexe workflows te automatiseren.

PowerShell code: duidelijke uitleg en voorbeelden - 2

Werken met variabelen, loops en conditionele logica

Een script wordt pas echt krachtig wanneer je variabelen gebruikt en de uitvoering stuurt met loops en if-structuren. PowerShell ondersteunt onder andere for, foreach, while en do-while. Ook de conditionele opdrachten if, elseif, else en switch zijn beschikbaar.

Een eenvoudig voorbeeld toont hoe je een lijst met processen doorloopt en alleen de processen met hoog CPU-gebruik in een bestand opslaat:

$processen = Get-Process
foreach ($proces in $processen) {
if ($proces.CPU -gt 200) {
$proces | Export-Csv -Path "zware_processen.csv" -Append
}
}

In dit script wordt elke variabele $proces gecheckt op CPU-waarde. Als deze hoger is dan 200, wordt het proces toegevoegd aan een CSV-bestand. Let op het gebruik van de pijplijn en de objectgeoriënteerde benadering: je werkt direct met de eigenschappen van het procesobject.

Naast loops gebruik je vaak switch voor meerdere condities. Bijvoorbeeld voor het bepalen van de status van een service:

PowerShell code: duidelijke uitleg en voorbeelden - 3

$status = (Get-Service -Name Spooler).Status
switch ($status) {
'Running' { Write-Output "De printspooler draait." }
'Stopped' { Write-Output "De printspooler is gestopt." }
default { Write-Output "Onbekende status: $status" }
}

Dit maakt scripts leesbaar en eenvoudig uit te breiden.

Voorbeeld: gebruikers uit Active Directory ophalen

Een specifieke use case die veel beheerders tegenkomen, is het ophalen van AD-gebruikers die recentelijk zijn aangemaakt. Dankzij de Active Directory-module (RSAT) kun je eenvoudig filteren op datum. Het volgende script toont alle gebruikers die in de afgelopen 7 dagen zijn aangemaakt:

$Datum = (Get-Date).AddDays(-7)
Get-ADUser -Filter {whenCreated -ge $Datum} -Properties Name,Enabled,whenCreated

De variabele $Datum wordt berekend door 7 dagen af te trekken van de huidige datum. De Filter-parameter accepteert een blok met de voorwaarde wanneer whenCreated groter of gelijk is aan $Datum. De parameter -Properties vraagt extra eigenschappen op die niet standaard worden getoond. Het resultaat is een overzichtelijke tabel met de namen, of het account is ingeschakeld, en de aanmaakdatum.

PowerShell code: duidelijke uitleg en voorbeelden - 4

Dit script kun je eenvoudig uitbreiden met een Export-Csv om een rapport te genereren. Het laat zien hoe krachtig PowerShell is in combinatie met Active Directory. De AD-cmdlets zijn onmisbaar voor omgevingen met Azure AD of on-premises directory´s.

Beveiliging: uitvoeringsbeleid

PowerShell heeft ingebouwde beveiligingsmechanismen om te voorkomen dat onbedoelde of schadelijke scripts worden uitgevoerd. Het belangrijkste onderdeel is het uitvoeringsbeleid (ExecutionPolicy). Dit beleid bepaalt onder welke voorwaarden scripts mogen draaien. De meest gebruikte waarden zijn:

  • Restricted: geen scripts toegestaan (standaard op Windows-clients).
  • RemoteSigned: lokaal geschreven scripts mogen altijd draaien; scripts van internet moeten zijn ondertekend door een vertrouwde uitgever.
  • AllSigned: alle scripts moeten zijn ondertekend.
  • Unrestricted: alle scripts mogen draaien, maar bij scripts van internet krijg je een waarschuwing.

Je kunt het beleid instellen met de cmdlet Set-ExecutionPolicy. Bijvoorbeeld:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

De scope bepaalt voor wie de instelling geldt: CurrentUser, LocalMachine of Process. Het is raadzaam om het beleid niet ruimer in te stellen dan nodig. RemoteSigned is een goede balans tussen gebruiksgemak en veiligheid. Houd er rekening mee dat het uitvoeringsbeleid geen beveiligingsgrens is; het is een waarschuwingsmechanisme. Geavanceerde gebruikers kunnen het omzeilen. Desondanks helpt het om onbedoeld uitvoeren van scripts te voorkomen.

PowerShell code: duidelijke uitleg en voorbeelden - 5

Scripts schrijven en onderhouden

Voor het schrijven van PowerShell-code kun je eenvoudig Notepad gebruiken, maar een editor zoals Visual Studio Code met de PowerShell-extensie biedt syntaxishighlighting, foutopsporing en IntelliSense. Bovendien kun je met de ingebouwde helpfunctie (Get-Help) snel de juiste parameters vinden. Een goede gewoonte is om aan het begin van elk script commentaarregels te plaatsen die het doel en de auteur beschrijven. Commentaar begin je met een hekje #.

Daarnaast is het nuttig om foutafhandeling toe te voegen met try-catch blokken. Hiermee vang je onverwachte fouten op en kun je het script netjes laten afsluiten. Voorbeeld:

try {
Get-ADUser -Identity "nietbestaand"
} catch {
Write-Error "Gebruiker niet gevonden: $_"
}

Door gestructureerd te programmeren en gebruik te maken van de beschikbare resources, kun je robuuste en herbruikbare scripts maken.

Verder lezen en bronnen

PowerShell blijft zich ontwikkelen. Microsoft biedt uitgebreide documentatie op hun leerplatform. Daarnaast is de PowerShell-gemeenschap actief op GitHub en diverse fora. De volgende bronnen zijn gebruikt bij het schrijven van dit artikel:

Microsoft Learn: PowerShell Overview – basisinformatie over de shell en scripting language specification.

Wikipedia: PowerShell – geschiedenis, functionaliteiten en object-gebaseerde pijplijn.

Microsoft Learn: Active Directory Cmdlets – voorbeelden van Get-ADUser en andere directory-cmdlets.

GitHub: PowerShell repository – open-source code en release-informatie.

Met deze kennis kun je aan de slag met PowerShell code. Oefen met kleine scripts en breid ze stap voor stap uit. De mogelijkheden zijn vrijwel onbegrensd, of je nu gebruikersbeheer, logboekanalyse of cloudautomatisering wilt optimaliseren.

PowerShell code script automatisering Windows voorbeelden uitleg
Let op Inhoud is bedoeld als algemene uitleg en kan per systeem of versie verschillen.
Auteur

Stefano Barcellos

Medewerker bij Visite Barbados.

« Vorig bericht
Wat is een ID? Betekenis en gebruik uitgelegd

Gerelateerde berichten