powershell scripts

New Page

<#
Praktijkleren Examenopdracht – PowerShell
Onderwerp: Kentekencheck automatiseren
Auteur: <jouw naam>
Datum: <datum>


Dit script automatiseert het opzoeken van voertuiggegevens
via RDW Open Data.
#>


function Vraag-Kenteken {
    <#
    Vraagt maximaal 3 keer om een geldig kenteken.
    Geeft het kenteken of $null terug.
    #>
    $pogingen = 0  # variabele


    while ($pogingen -lt 3) {  # lus met limiet
        $kenteken = Read-Host "Voer een kenteken in (6 tekens)"
        $kenteken = $kenteken.ToUpper().Replace("-", "").Trim()


        if ($kenteken.Length -eq 6) {  # beslissing
            return $kenteken
        }
        else {
            $pogingen++
            Write-Host "Ongeldig kenteken. Poging $pogingen van 3." -ForegroundColor Red
        }
    }


    Write-Host "Te veel foutieve pogingen. Programma stopt." -ForegroundColor Yellow
    return $null
}


function Haal-VoertuiggegevensOp {
    param (
        [string]$Kenteken
    )


    $url = "https://opendata.rdw.nl/resource/m9d7-ebf2.json?kenteken=$Kenteken"


    try {
        return Invoke-RestMethod -Uri $url -Method Get
    }
    catch {
        return $null
    }
}


function Toon-Gegevens {
    param (
        $Data
    )


    if (-not $Data) {  # beslissing
        Write-Host "Geen voertuiggegevens gevonden." -ForegroundColor Yellow
        return
    }


    $voertuig = $Data[0]
    Write-Host ""
    Write-Host "Voertuiggegevens:"
    Write-Host "Kenteken:" $voertuig.kenteken
    Write-Host "Merk:" $voertuig.merk
    Write-Host "Type:" $voertuig.handelsbenaming
    Write-Host "Voertuigsoort:" $voertuig.voertuigsoort
    Write-Host "Eerste toelating:" $voertuig.datum_eerste_toelating
}


# Hoofdprogramma
$doorgaan = $true  # variabele


while ($doorgaan) {  # lus
    $kenteken = Vraag-Kenteken
    if ($null -eq $kenteken) {
        break
    }


    $gegevens = Haal-VoertuiggegevensOp -Kenteken $kenteken
    Toon-Gegevens -Data $gegevens


    $keuze = Read-Host "`nNog een kenteken controleren? (j/n)"
    if ($keuze.ToLower() -ne "j") {  # beslissing
        $doorgaan = $false
    }
}


Write-Host "Programma afgesloten."

New Page

<#
Praktijkleren Examenopdracht – PowerShell
Onderwerp: Subnetcalculator
Auteur: <jouw naam>
Datum: <datum>


Dit script berekent netwerkgegevens op basis van
een IP-adres en subnetmasker (CIDR).
#>


function Vraag-IPAdres {
    $pogingen = 0  # variabele


    while ($pogingen -lt 3) {  # lus met limiet
        $ip = Read-Host "Voer een IP-adres in (bijv. 192.168.1.10)"
        $delen = $ip.Split(".")


        if ($delen.Count -eq 4 -and ($delen | ForEach-Object { $_ -match '^\d+$' -and [int]$_ -le 255 })) {
            return $ip
        }
        else {
            $pogingen++
            Write-Host "Ongeldig IP-adres. Poging $pogingen van 3." -ForegroundColor Red
        }
    }


    Write-Host "Te veel foutieve pogingen." -ForegroundColor Yellow
    return $null
}


function Vraag-Subnetmasker {
    $cidr = Read-Host "Voer subnetmasker in (CIDR, bijv. 24)"


    if ($cidr -match '^\d+$' -and [int]$cidr -ge 0 -and [int]$cidr -le 32) {
        return [int]$cidr
    }
    else {
        Write-Host "Ongeldig subnetmasker." -ForegroundColor Red
        return $null
    }
}


function Bereken-Hosts {
    param (
        [int]$CIDR
    )


    $hostBits = 32 - $CIDR
    $hosts = [math]::Pow(2, $hostBits) - 2
    return [int]$hosts
}


# Hoofdprogramma
$ip = Vraag-IPAdres
if ($null -eq $ip) { return }


$cidr = Vraag-Subnetmasker
if ($null -eq $cidr) { return }


$aantalHosts = Bereken-Hosts -CIDR $cidr


Write-Host "`nResultaat:"
Write-Host "IP-adres:" $ip
Write-Host "Subnetmasker: /$cidr"
Write-Host "Aantal mogelijke hosts:" $aantalHosts

New Page

<#
Praktijkleren Examenopdracht – PowerShell
Onderwerp: Logbestand analyseren
Auteur: <jouw naam>
Datum: <datum>


Dit script analyseert een logbestand en telt
het aantal foutmeldingen.
#>


function Lees-Logbestand {
    param (
        [string]$Bestandsnaam
    )


    if (Test-Path $Bestandsnaam) {
        return Get-Content $Bestandsnaam
    }
    else {
        Write-Host "Bestand niet gevonden." -ForegroundColor Red
        return $null
    }
}


function Tel-Fouten {
    param (
        [string[]]$Regels
    )


    $foutTeller = 0  # variabele


    foreach ($regel in $Regels) {  # lus
        if ($regel.Contains("ERROR")) {  # beslissing
            $foutTeller++
        }
    }


    return $foutTeller
}


# Hoofdprogramma
$bestandsnaam = "logbestand.txt"  # variabele


$regels = Lees-Logbestand -Bestandsnaam $bestandsnaam
if ($null -eq $regels) { return }


$fouten = Tel-Fouten -Regels $regels


Write-Host "`nAnalyse resultaat:"
Write-Host "Aantal regels in bestand:" $regels.Count
Write-Host "Aantal foutmeldingen:" $fouten