Powershell

Les 1 Introductie Powershell // Mappen en bestanden

Leerdoelen:

  • Begrijpen wat PowerShell is en waarvoor het wordt gebruikt.
  • Kennismaken met basis PowerShell-commando’s (cmdlets) en hun syntaxis.
  • Werken met mappen en bestanden met behulp van PowerShell.

Wat is PowerShell?

PowerShell is een krachtige en flexibele Command Line Interface (CLI) en automatiseringstaal ontworpen voor systeembeheerders en ontwikkelaars. Het doel van PowerShell is om taken te automatiseren en de efficiëntie te verhogen bij het beheren van Windows-besturingssystemen en aanverwante Microsoft-producten. 

Er zijn twee soorten shells:

  • Command Line Interface
  • Graphical User Interface

Vandaag werken bijna alle computersystemen met een Grafische User Interface.

Waarom bestaat de CLI dan nog?

Commando’s in de vorm van tekst zijn niet alleen door een mens in te geven. Zulke commando’s kun je ook in een tekstbestand plaatsen, waarna je ze achter elkaar kunt uitvoeren. Als je in zo’n tekstbestand nou ook nog eenvoudige logische beslissingen kunt nemen, zoiets als : “als iets het geval is doe dan dit en anders doe dat” , of “doe dit elke 10 minuten”, of “doe dit 10 keer”, dan heb je eigenlijk een scripting-taal te pakken.

Een scripting-taal is dus een mengsel van (eenvoudige) beslissingsstructuren en commando’s voor het besturingssysteem.

Waarom PowerShell?

Bestandsbeheer

  • Kopiëren, verplaatsen, en verwijderen van bestanden en mappen.
  • Back-ups maken door mappen of bestanden te archiveren.
  • Bulk bewerkingen zoals hernoemen van bestanden, of tekst vervangen binnen meerdere bestanden.

Systeembeheer

  • Processen beheren: Processen starten, stoppen of monitoren.
  • Services beheren: Services opstarten, stoppen, herstarten en hun status controleren.
  • Schijfbeheer: Opslagruimte monitoren, schijven partitioneren, schijfstations controleren.

Gebruikersbeheer en Active Directory

  • Gebruikers en groepen beheren binnen Active Directory.
  • Nieuwe gebruikers aanmaken, wachtwoorden resetten of permissies aanpassen.
  • Groepsbeleid toepassen of wijzigen.

Software en updates beheren

  • Software installeren, updaten of verwijderen via MSI of andere installatietools.
  • Windows-updates beheren en patches installeren.

Veiligheidscontroles en monitoring

  • Audit logs uitlezen en analyseren voor beveiligingsincidenten.
  • Firewall configuraties beheren en toegangspunten aanpassen.
  • Beveiligingsscans uitvoeren en rapporten genereren.

Cmdlet

Cmdlets zijn kleine, opdracht-specifieke scripts of functies die worden gebruikt in PowerShell. Ze vormen de bouwstenen waarmee gebruikers op een gestructureerde en eenvoudige manier taken kunnen uitvoeren via de PowerShell-opdrachtregelinterface.

Bestanden en mappen

Basiscommando’s:

  • Get-Help: Hiermee krijg je hulpinformatie over PowerShell-commando’s.Get-Help CommandName
  • Get-Command: Toont alle beschikbare PowerShell-commando’s.Get-Command

1. Huidige Locatie:

  • Get-Location: Geeft de huidige werkmap (locatie) weer.

Get-Location

2. Bestanden Weergeven:

  • Get-ChildItem: Toont de bestanden en mappen in de huidige locatie.

Get-ChildItem

3. Wisselen van Map:

  • Set-Location: Verandert de huidige map.

Set-Location C:\Pad\Naar\Andere\Map

4. Bestanden en Mappen Maken:

  • New-Item: Maakt een nieuw bestand of map aan.

New-Item -ItemType File -Path "C:\Pad\Naar\Bestand.txt"

New-Item -ItemType Directory -Path "C:\Pad\Naar\NieuweMap"

5. Bestanden Verwijderen:

  • Remove-Item: Verwijdert een bestand of map.

Remove-Item "C:\Pad\Naar\Bestand.txt"

6. Bestandsinhoud Lezen/Schrijven:

  • Get-Content: Leest de inhoud van een tekstbestand.

Get-Content "C:\Pad\Naar\Bestand.txt"

  • Set-Content: Schrijft gegevens naar een bestand.

Set-Content "C:\Pad\Naar\Bestand.txt" -Value "Dit is de nieuwe inhoud."

7. Kopiëren en Verplaatsen:

  • Copy-Item: Kopieert bestanden of mappen.

Copy-Item "C:\Pad\Naar\Bestand.txt" -Destination "C:\Doel\Pad"

  • Move-Item: Verplaatst bestanden of mappen.

Move-Item "C:\Pad\Naar\Bestand.txt" -Destination "C:\Doel\Pad"

Les 2 Filteren // Pipeline

Leerdoelen

  • Begrijpen hoe je een selectie kan filteren.
  • Begrijpen wat pipeline is en hoe het wordt gebruikt.
  • Begrijpen wat een object is.
  • Processen ophalen en filteren op basis van een object.

Zoals in elke scripttaal heeft ook PS een zogenaamde syntax, met andere woorden de manier waar op een commando is opgebouwd. 

Het eerste deel is (meestal) een werkwoord bijv: Get

Door het volgende commando uit te voeren in je powershell krijg je alle commando’s te zien 

Get – Verb

Nadat je een commando heb opgegeven komt er altijd een streepje – te staan daarna komt er een zelfstandig naamwoord

Get-ChildItem: Dit commando wordt gebruikt om de items weer te geven die zich in een specifieke map bevinden.

Syntax:

Get-ChildItem [-Path] <pad> [-Filter <filter>] [-Recurse]

na childitem komen de parameters met de achter de values in dit voor beeld staan er 3

path Hier staat waar we iets kunnen vinden zoals bijvoorbeeld C:\windows\system32

filter met daarachter een value zoals bijvoorbeeld *.exe 

Recurse dit betekent dat je ook kan zoeken in submappen

Get-ChildItem -path C:\windows\system32 -filter *.exe -Recurse betekent dan ook laat alle bestanden zien in de folder C:\windows\system32 die in ieder geval .exe bestand zijn en zoek ook in de submappen van system32. 

* is een zogenoemde wildcard en kan vervangen worden door alle tekens.

  1. * (Asterisk):
    • Dit vertegenwoordigt nul of meer tekens.
    • Bijvoorbeeld: *test* zou overeenkomen met “mijn_test_bestand.txt” en “test123.txt”.
  2. ? (Vraagteken):
    • Dit vertegenwoordigt één willekeurig teken.
    • Bijvoorbeeld: file?.txt zou overeenkomen met “file1.txt” en “fileA.txt”.
  3. [ ] (Haakjes):
    • Hiermee kun je een reeks tekens definiëren die op één positie kunnen voorkomen.
    • Bijvoorbeeld: [aeiou] komt overeen met een enkele klinker.

Enkele voorbeelden van het gebruik van wildcards in PowerShell:

  • Get-ChildItem met wildcards:Get-ChildItem -Path C:\Map\Submap\*test*.txtDit zal alle tekstbestanden weergeven die ergens in de opgegeven mapstructuur het woord ‘test’ in hun naam hebben.
  • Select-String met wildcards:Get-Content -Path C:\Bestand.txt | Select-String -Pattern "pa*ern"Dit zal regels in “Bestand.txt” vinden waar het woord ‘pattern’ voorkomt met mogelijke karakters voor ‘pa’ gevolgd door ‘ern’.

Wildcards zijn handig om flexibele zoekopdrachten uit te voeren en om specifieke patronen te vinden in tekst of bestandsnamen binnen PowerShell-opdrachten.

Pipeline

De pipeline in PowerShell is een krachtig concept dat het mogelijk maakt om de uitvoer van het ene commando direct als invoer voor het volgende commando te gebruiken. Dit bevordert de modulariteit en flexibiliteit van PowerShell-scripts. Hier is een uitleg over de PowerShell-pipeline:

Het symbool dat wordt gebruikt om een pipeline aan te geven is de verticale streep |. Dit symbool wordt gebruikt om de uitvoer van het ene commando door te geven aan het volgende commando. Hierdoor kun je complexe taken uitvoeren door verschillende PowerShell-commando’s aan elkaar te koppelen.

Bijvoorbeeld:

Get-ChildItem -Path C:\Map | Where-Object { $_.Name -like "*.txt" } | Select-Object Name, Length

In dit voorbeeld worden drie cmdlets samengevoegd met behulp van pipelines (|).

  • Get-ChildItem haalt alle items op in de map “C:\Map”.
  • Where-Object filtert de items waarvan de naam eindigt op “.txt”.
  • Select-Object selecteert vervolgens alleen de kolommen ‘Name’ en ‘Length’ van de overgebleven items.

De pipeline maakt het mogelijk om efficiënter te werken door de uitvoer van het ene commando te gebruiken als invoer voor het volgende, waardoor complexe taken met verschillende stappen kunnen worden uitgevoerd in één opdrachtregel.

Filteren op basis van een waarde

Als je bijvoorbeeld specifieke procesgegevens wilt selecteren op basis van een bepaalde CPU-verbruikwaarde, kun je een vergelijkingsoperator gebruiken, zoals -gt (groter dan), -lt (kleiner dan), of andere, afhankelijk van je vereisten.

# Haal processen op en selecteer alleen die met CPU-verbruik hoger dan de drempelwaarde
Get-Process | Where-Object { $_.CPU -gt “een bepaalde waarde” } 

Filteren op basis van een bepaald object

Als je specifieke processen wilt filteren op basis van een bepaald object (bijvoorbeeld een specifieke eigenschap of waarde van een eigenschap), kun je gebruikmaken van de Where-Object cmdlet. Hier is een voorbeeld waarin alleen processen worden geselecteerd waarvan de naam begint met de letter “s”:

Get-Process | Where-Object { $_.ProcessName -like 's*' } 

In dit voorbeeld wordt de Where-Object cmdlet gebruikt om processen te selecteren waarvan de ProcessName-eigenschap begint met de letter “s”. De resultaten worden vervolgens weergegeven op het scherm.

Les 3 Variabelen // Comments // Operators

Leerdoelen

  • Begrijpen waarom en hoe de comments worden gebruikt.
  • Begrijpen wat een variabele is en hoe je het definieert.
  • Begrijpen wat een datatype is.
  • Gebruik maken van vergelijkingoperators.

Comments

In PowerShell worden comments gebruikt om tekst toe te voegen aan een script. Opmerkingen zijn bedoeld voor menselijke lezers en worden genegeerd door de PowerShell-interpreter tijdens de uitvoering. Er zijn twee manieren om opmerkingen toe te voegen in PowerShell:

Opmerking op één regel:

  • Een enkele regel opmerking begint met het # symbool. Alles wat na # komt op dezelfde regel wordt beschouwd als een opmerking.

# Dit is een opmerking op één regel

Opmerking over meerdere regels:

  • Voor opmerkingen die meerdere regels beslaan, kun je <# ... #> gebruiken.

<# Dit is een opmerking die

meerdere regels beslaat. #>

Variabelen

Een variabele in PowerShell is een naam die wordt gebruikt om een waarde op te slaan. Variabelen in PowerShell beginnen meestal met het dollarteken ($). Hier zijn enkele basisprincipes over hoe variabelen werken in PowerShell:

Variabelenaanmaak en -toewijzing

Je kunt een variabele aanmaken en een waarde toewijzen door de variabelenaam te gebruiken, gevolgd door een gelijkteken (=) en de waarde die je wilt toekennen. Bijvoorbeeld:

$leeftijd = 30

$naam = "John"

Waarden ophalen uit variabelen

Om de waarde van een variabele op te roepen, gebruik je gewoon de variabelenaam met een voorvoegsel van het dollarteken ($). Bijvoorbeeld:

$leeftijd

$naam

Variabelen combineren

Variabelen kunnen worden gecombineerd in bewerkingen. Bijvoorbeeld:

$leeftijd + 5 # Dit zal de waarde van

$leeftijd met 5 verhogen en het resultaat weergeven

Dynamische variabelen

Variabelen kunnen dynamisch worden gemaakt door ze bijvoorbeeld in te zetten in een string (stringinterpolatie) met dubbele aanhalingstekens:

"$naam is $leeftijd jaar oud."

Variabelen verwijderen

Je kunt een variabele verwijderen met de Remove-Variable cmdlet of door deze opnieuw te definiëren als $null:

Remove-Variable naam $leeftijd = $null

Variabelentypes

PowerShell is dynamisch getypeerd, wat betekent dat je geen expliciet gegevenstype hoeft op te geven bij het aanmaken van variabelen. De toewijzing van een waarde bepaalt het gegevenstype van de variabele. Je kunt het gegevenstype van een variabele controleren met GetType():

$leeftijd.GetType()

Dit zijn enkele basisprincipes van het werken met variabelen in PowerShell. Variabelen bieden een flexibele manier om gegevens op te slaan en te manipuleren in PowerShell-scripts en interactieve PowerShell-sessies.

Declareren van Variabelen

In PowerShell kun je variabelen declareren door simpelweg een naam toe te wijzen aan een waarde. Hier zijn een paar manieren om een variabele te declareren in PowerShell:

Manier 1: Direct toewijzen van een waarde aan een variabele

$leeftijd = 25 $naam = "Jan"

In dit voorbeeld worden twee variabelen leeftijd en naam gedeclareerd en wordt elke variabele direct een waarde toegewezen.

Manier 2: Declareren zonder waarde toe te kennen

$auto

Met deze enkele regel wordt een variabele auto gedeclareerd, maar deze heeft nog geen waarde toegewezen gekregen. In PowerShell wordt een variabele automatisch gemaakt wanneer je er een waarde aan toewijst.

Manier 3: Gekwalificeerde variabelenamen

Je kunt variabelenamen ook op verschillende manieren declareren, zoals:

  • CamelCase$mijnVariabeleNaam
  • PascalCase$MijnVariabeleNaam
  • SnakeCase$mijn_variabele_naam

Het is aanbevolen om consistent te zijn in het benoemen van variabelen om de leesbaarheid te verbeteren.

Manier 4: Variabelen declareren met expliciete datatypen

PowerShell is dynamisch getypeerd, wat betekent dat je geen expliciete gegevenstypen hoeft te specificeren bij het declareren van variabelen. Het type van de variabele wordt bepaald door de waarde die eraan wordt toegewezen. Desondanks kun je variabelen met een expliciet type declareren zoals dit:

[int]$getal = 10 [string]$tekst = "Voorbeeld"

In dit voorbeeld worden variabelen $getal en $tekst gedeclareerd met expliciete datatypen (int en string).

Variabelen in PowerShell worden gedeclareerd en gebruikt met het dollar-teken ($) voor de variabelenaam. Ze zijn flexibel en dynamisch van aard, en hun datatypen worden bepaald door de toegewezen waarden.

Operators

In PowerShell worden operators gebruikt voor het uitvoeren van verschillende bewerkingen, vergelijkingen en andere taken binnen scripts en commando’s. Hier zijn enkele veelgebruikte operators in PowerShell:

1. Rekenkundige Operators:

  • + (Optellen): Voegt getallen toe.$resultaat = 5 + 3
  • - (Aftrekken): Trekt het rechtergetal af van het linkergetal.$resultaat = 10 - 4
  • * (Vermenigvuldigen): Vermenigvuldigt twee getallen.$resultaat = 6 * 2
  • / (Delen): Deelt het linkergetal door het rechtergetal.$resultaat = 20 / 4
  • % (Modulus): Geeft de rest van de deling terug.$rest = 10 % 3 # Geeft 1 terug, omdat 10 gedeeld door 3 een rest van 1 heeft.

2. Toewijzingsoperators:

  • = (Toewijzen): Ken een waarde toe aan een variabele.$nummer = 42
  • += (Toevoegen en toewijzen): Voegt een waarde toe aan de huidige waarde van een variabele.$nummer += 10 # Voegt 10 toe aan de waarde van $nummer

3. Vergelijkingsoperators:

  • -eq (Gelijk aan): Controleert of twee waarden gelijk zijn.$resultaat = (5 -eq 5) # Geeft $True terug
  • -ne (Niet gelijk aan): Controleert of twee waarden niet gelijk zijn.$resultaat = (5 -ne 3) # Geeft $True terug
  • -gt (Groter dan): Controleert of de linkerwaarde groter is dan de rechterwaarde.$resultaat = (8 -gt 5) # Geeft $True terug
  • -lt (Kleiner dan): Controleert of de linkerwaarde kleiner is dan de rechterwaarde.$resultaat = (3 -lt 6) # Geeft $True terug
  • -ge (Groter dan of gelijk aan): Controleert of de linkerwaarde groter is dan of gelijk is aan de rechterwaarde.$resultaat = (7 -ge 7) # Geeft $True terug
  • -le (Kleiner dan of gelijk aan): Controleert of de linkerwaarde kleiner is dan of gelijk is aan de rechterwaarde.$resultaat = (4 -le 5) # Geeft $True terug

4. Logische Operators:

-not (Logische NIET): Keert de waarheidswaarde van een voorwaarde om.$resultaat = -not $True # Geeft $False terug

-and (Logische EN): Geeft $True terug als beide voorwaarden waar zijn.$resultaat = ($True -and $False) # Geeft $False terug

-or (Logische OF): Geeft $True terug als minstens één van de voorwaarden waar is.$resultaat = ($True -or $False) # Geeft $True terug

Les 4 If, elseif en else

In PowerShell worden ifelseif, en else gebruikt als controlestructuren om beslissingen te nemen op basis van voorwaarden. Hier is een uitleg over hoe ze werken:

if-verklaring

if wordt gebruikt om een enkele voorwaarde te controleren. Als de voorwaarde waar is, wordt de bijbehorende code uitgevoerd. Als de voorwaarde niet waar is, wordt de code niet uitgevoerd.

$leeftijd = 25

if ($leeftijd -gt 18){

 Write-Host "De persoon is volwassen."

}

In dit voorbeeld wordt de waarde van $leeftijd gecontroleerd. Als $leeftijd groter is dan 18, wordt de boodschap “De persoon is volwassen.” weergegeven.

elseif-verklaring

elseif wordt gebruikt om extra voorwaarden te controleren als de initiële if-voorwaarde niet waar is.

$leeftijd = 16

if ($leeftijd -gt 18){

Write-Host "De persoon is volwassen."

}elseif ($leeftijd -ge 13) {

Write-Host "De persoon is een tiener."

}else {

Write-Host "De persoon is een kind."

}

In dit voorbeeld, als de leeftijd groter is dan 18, wordt de boodschap “De persoon is volwassen.” weergegeven. Als dat niet het geval is, maar de leeftijd minstens 13 is, wordt de boodschap “De persoon is een tiener.” weergegeven. Anders, als geen van de bovenstaande voorwaarden waar is, wordt de boodschap “De persoon is een kind.” weergegeven.

else-verklaring

else wordt gebruikt om code uit te voeren als geen van de voorgaande voorwaarden waar is.

$leeftijd = 8

if ($leeftijd -gt 18){

Write-Host "De persoon is volwassen."

}else{

Write-Host "De persoon is een kind."

}

In dit voorbeeld wordt gecontroleerd of de leeftijd groter is dan 18. Als dat niet het geval is, wordt de boodschap “De persoon is een kind.” weergegeven.

De ifelseif, en else control structures zijn essentieel voor het schrijven van beslissingslogica in PowerShell-scripts. Ze helpen bij het uitvoeren van specifieke acties op basis van verschillende voorwaarden.

Les 5 Arrays

Arrays

Een array is een gegevensstructuur die wordt gebruikt om een reeks van waarden van hetzelfde datatype op te slaan. In PowerShell is een array een van de meest gebruikte gegevenstypen en het stelt je in staat om efficiënt met meerdere waarden om te gaan.

Array aanmaken:

$getallen = @(1, 2, 3, 4, 5)

$teksten = @("hallo", "wereld", 3, 4, 5)

Array datatype meegeven

Als het een array van een string is, geef je dat op deze manier aan;

[array]$tekstenEnGetallen = @("hallo", "wereld",1,2)

OF

[string[]]$teksten = @("hallo", "wereld")

[int[]]$getallen = @(1, 2, 3, 4, 5)

Array Indexering:

  • PowerShell-arrays zijn zero-based, wat betekent dat het eerste element een index van 0 heeft.$getallen[0] # Geeft het eerste element terug. Dus 1$teksten[1] # Geeft het tweede element terug. Dus Wereld

Array Operaties:

  • Lengte van een Array:$lengte = $getallen.Length
  • Toevoegen aan een Array:$getallen += 6
  • Verwijderen uit een Array:$getallen = $getallen -ne 3 # Verwijder het element met waarde 3

Les 6 Foreach

In PowerShell wordt de foreach loop gebruikt om door elk item in een verzameling te itereren, zoals een array, een hashtable, een lijst of een andere verzameling van objecten. Hier is een uitleg over hoe de foreach loop werkt in PowerShell:

foreach loop met een array

Laten we een voorbeeld bekijken met een eenvoudige array:

$fruit = @("Appel", "Banaan", "Sinaasappel")

foreach ($item in $fruit)

{ Write-Host "Huidig item is: $item" }

Dit script doorloopt elk item in de array $fruit en voert de code in de foreach loop uit. Bij elke iteratie wordt de huidige waarde van het item ($item) geprint.

foreach loop met een hashtable

Een foreach loop kan ook worden gebruikt met een hashtable:

$person = @{ "Naam" = "John"; "Leeftijd" = 30; "Stad" = "New York" }

foreach ($key in $person.Keys)

{ $value = $person[$key]

Write-Host "$key: $value" }

Dit voorbeeld doorloopt de sleutels van de hashtable $person en haalt de waarde op die aan elke sleutel is gekoppeld. Vervolgens worden de sleutel-waardeparen geprint.

foreach loop met een reeks getallen

De foreach loop kan ook worden gebruikt om door een reeks getallen te itereren:

foreach ($i in 1..5)

{ Write-Host "Huidige waarde van \$i is: $i" }

Hier wordt de foreach loop gebruikt om door de getallen 1 tot en met 5 te itereren en de huidige waarde van $i te printen.

De foreach loop in PowerShell biedt een handige manier om door verschillende soorten verzamelingen te itereren en bewerkingen uit te voeren op elk item binnen die verzameling. Het helpt bij het uitvoeren van taken voor elk element in de verzameling op een georganiseerde en efficiënte manier.

 Les 7 Do, While, Until // Script pauzeren

In PowerShell worden de lussen do-while en do-until, evenals de lussen while en until, gebruikt om herhaalde taken uit te voeren op basis van een bepaalde voorwaarde. Hier is een uitleg van hoe deze lussen werken:

do-while lus

De do-while lus voert eerst de code in de lus uit en controleert dan de voorwaarde. Als de voorwaarde waar is, wordt de lus opnieuw uitgevoerd.

$nummer = 1

do {

Write-Host "Huidige waarde: $nummer" $nummer++

}

while ($nummer -le 5)

In dit voorbeeld wordt de waarde van $nummer eerst afgedrukt en vervolgens wordt er met 1 opgehoogd in elke iteratie. De lus wordt herhaald totdat $nummer niet meer kleiner of gelijk is aan 5.

do-until lus

De do-until lus voert ook eerst de code in de lus uit, maar blijft herhalen totdat de voorwaarde waar is.

$nummer = 1

do {

Write-Host "Huidige waarde: $nummer" $nummer++

}

until ($nummer -ge 5)

In dit voorbeeld wordt de lus herhaald totdat $nummer groter of gelijk is aan 5.

while lus

De while lus controleert eerst de voorwaarde en voert vervolgens de code binnen de lus uit als de voorwaarde waar is.

$nummer = 1 while ($nummer -le 5)

{

Write-Host "Huidige waarde: $nummer" $nummer++

}

De while lus zal de code binnenin herhalen zolang $nummer kleiner of gelijk is aan 5.

Deze lus biedt flexibiliteit om herhaalde taken uit te voeren op basis van verschillende voorwaarden in PowerShell-scripts. Deze controleert de voorwaarde vóór de uitvoering van de code (while controleert vóór de uitvoering, do-while en do-until controleren na de uitvoering). Goed om te weten is, dat de while wél zonder do kan, maar de until niet.

Wachtperiode in PowerShell

Om het PowerShell-script bijvoorbeeld 5 seconden te laten pauzeren, kun je gebruikmaken van de Start-Sleep cmdlet. Hier is een voorbeeld:

Write-Host "Het script wordt gepauzeerd voor 5 seconden..."

Start-Sleep -Seconds 5

Write-Host "Het script gaat nu verder."

In dit voorbeeld wordt Start-Sleep -Seconds 5 gebruikt om het script 5 seconden te laten pauzeren voordat het verdergaat met de uitvoering. Je kunt het aantal seconden aanpassen aan je behoeften.

Je kan het nog duidelijker maken voor de user door het toevoegen van een tekst of puntjes. Hier een voorbeeld;

Write-Host “Het script wordt gepauzeerd voor 5 seconden…”

$aantalSeconden = 5

for ($i = 0; $i -lt $aantalSeconden; $i++) {

Write-Host -noNewLine “.”

Start-Sleep -Seconds 1

}

Write-Host “`n Het script gaat nu door.”

Les 8 for-loop

Vorige les hebben we een do, while en until lus behandeld. Deze les leren we nog een belangrijke lus binnen PowerShell, namelijk de for. In code komen we dit type lus veel tegen en hieronder zal elk onderdeel uitgelegd worden.

For-loop (lus)

De for lus is een lus die uit drie onderdelen bestaat: initialisatie, conditie en herhaling. Voor een for lus gebruiken we eigenlijk altijd een getal dat we eerst aanmaken (initialisatie), kijken we net als bij de while of iets nog waar is (conditie) en na elke keer dat deze lus wordt doorlopen wordt er een commando uitgevoerd (herhaling).

Hoe ziet dit er dan uit? Hieronder zie je een blokje code met een while en een for lus die allebei hetzelfde doen.

WhileFor
Van 1 t/m 10 tellen
$i = 1;
while($i -le 10){
Write-Host “Getal is $i”
$i++
}
for($i = 1; $i -le 10; $i++){
Write-Host “Getal is $i”
}

While:

For



Beide lussen doen hetzelfde, maar je ziet dat we bij de for-lus alles korter tussen de haakjes kunnen zetten (met ; tussen de verschillende onderdelen).

Als we de ‘stroming’ van de for-lus uit zouden tekenen ziet het er ongeveer zo uit:

We beginnen met het rode, daarna kijken we eerst naar de blauwe conditie, klopt die nog? Dan gaan we alles binnen de krulhaken uitvoeren (blauwe pijl naar beneden), dan gaan we met de groene pijl omhoog en verhogen we ons getal ($i++, de herhaling). Dan gaan we weer terug naar de blauwe en herhalen we dit totdat hij niet meer waar is, dan stopt de lus.

Hieronder nog een voorbeelduitleg

0) Voor de eerste stap van een iteratie (het herhaald doorlopen van een stuk code) wordt de ‘initialisatie’ uitgevoerd.1) Dan wordt gekeken of aan de voorwaarde (de vergelijking) wordt voldaan. Als de voorwaarde waar (‘true’) is, dan wordt de code (het code-block) binnen de lus uitgevoerd. Als het niet waar (‘false’), dan is de for-loop klaar en ga je verder ná de for-loop (ga naar 4)2) Als de code is uitgevoerd wordt (aan het eind van een iteratie) de ‘increment’ uitgevoerd; de teller-variabele wordt opgehoogd of verlaagd.3) Ga naar 1)4) Klaar met de for-loop, ga verder met de volgende code.

Les 9 User input

Gebruikersinvoer in PowerShell

Leerdoelen:

  • Na deze les kun je gebruikersinvoer verkrijgen en verwerken in een PowerShell-script.
  • Na deze les kun je de gebruikersinvoer opslaan in variabelen.
  • Na deze les kun je verschillende operaties uitvoeren op basis van de gebruikersinvoer.

Read-Host cmdlet:

Read-Host is een cmdlet in PowerShell die je gebruikt om invoer van de gebruiker te vragen en te ontvangen via de terminal. Wanneer je Read-Host in een script of direct in de PowerShell-console gebruikt, pauzeert het de uitvoering van het script en wacht het op de gebruiker om tekst in te voeren. Zodra de invoer is gegeven en de Enter-toets is ingedrukt, gaat de uitvoering van het script verder, met de ingevoerde tekst als resultaat van de Read-Host opdracht.

Prompt voor Gebruikersinvoer:

  • Gebruik Read-Host met een duidelijke prompt om de gebruiker te begeleiden bij het invoeren van gegevens.

# Prompt voor invoer van de gebruiker

$leeftijd = Read-Host -Prompt "Voer je leeftijd in"

Write-Host "Je bent $leeftijd jaar oud."

Typecasting van Invoer:

Soms willen we de invoer van een bepaald datatype hebben. Hiervoor kunnen we het type casten, hieronder staat een voorbeeld daarvan.
Read-Host komt standaard binnen als string, dus als je een nummer invult en daar dan een ander nummer bij optelt, dan krijg je een rare uitkomst (bijvoorbeeld input 10 +=3  geeft 103 in plaats van 13)

# Typecasting van invoer naar getal

$getal = Read-Host "Voer een getal in"

$getal = [int]$getal

Write-Host "Het dubbele is: $($getal * 2)"

We kunnen ook direct dit type casten:

# Directe typecasting van invoer naar getal

[int]$getal = Read-Host "Voer een getal in"

Write-Host "Het dubbele is: $($getal * 2)"