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.
*
(Asterisk):- Dit vertegenwoordigt nul of meer tekens.
- Bijvoorbeeld:
*test*
zou overeenkomen met “mijn_test_bestand.txt” en “test123.txt”.
?
(Vraagteken):- Dit vertegenwoordigt één willekeurig teken.
- Bijvoorbeeld:
file?.txt
zou overeenkomen met “file1.txt” en “fileA.txt”.
[ ]
(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*.txt
Dit 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 if
, elseif
, 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 if
, elseif
, 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.
While | For |
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)"