Onne.psm1

# Functie voor het ophalen van de hardware-hash, het bewerken van het CSV-bestand en het versturen van de e-mail
function Get-AutoPilotHashAndSendMail {
    [CmdletBinding()]
    param(
        [string]$OutputFilePath = $script:DefaultOutputFilePath,
        [string]$EmailFrom      = $script:DefaultEmailFrom,
        [string]$EmailTo        = $script:DefaultEmailTo,
        [string]$Subject        = $script:DefaultSubject,
        [string]$Body           = $script:DefaultBody,
        [string]$SMTPServer     = $script:DefaultMailServer,
        [int]$SMTPPort          = $script:DefaultMailServerPort,
        [string]$Grouptag       = $script:DefaultGrouptag
    )

    # Controleer of Get-WindowsAutoPilotInfo.ps1 is geïnstalleerd
    if (-not (Get-Command Get-WindowsAutoPilotInfo.ps1 -ErrorAction SilentlyContinue)) {
        Write-Host "Get-WindowsAutoPilotInfo.ps1 wordt geïnstalleerd..."
        Install-Script -Name Get-WindowsAutoPilotInfo -Force
    }

    Write-Host "Het ophalen van de hardware-hash begint..."
    Get-WindowsAutoPilotInfo.ps1 -OutputFile $OutputFilePath

    # Controleer of het CSV-bestand is aangemaakt
    if (Test-Path $OutputFilePath) {
        Write-Host "Het CSV-bestand is succesvol aangemaakt: $OutputFilePath"
        
        # Alleen bewerken als Grouptag niet "Geen" is
        if ($Grouptag -ne "Geen") {
            Write-Host "Bewerken van CSV-bestand: toevoegen van kolom 'Group Tag'..."
            $csvData = @(Import-Csv -Path $OutputFilePath)

            if ($csvData.Count -gt 0) {
                # Verkrijg de kolomnamen in volgorde
                $columns = $csvData[0].PSObject.Properties.Name

                $newData = foreach ($row in $csvData) {
                    $orderedObj = [ordered]@{}

                    # Voeg alle bestaande kolommen toe
                    foreach ($col in $columns) {
                        $orderedObj[$col] = $row.$col
                    }

                    # Voeg de nieuwe kolom toe aan het einde
                    $orderedObj["Group Tag"] = $Grouptag

                    # Zet het ordered hashtable om in een PSCustomObject zodat de headers correct worden weergegeven
                    [PSCustomObject]$orderedObj
                }

                # Sla het gewijzigde CSV-bestand op dezelfde locatie op
                $newData | Export-Csv -Path $OutputFilePath -NoTypeInformation
                Write-Host "CSV-bestand aangepast met Group Tag."
            }

            else {
                Write-Host "CSV-bestand is leeg, er wordt geen bewerking uitgevoerd."
            }
        }
        else {
            Write-Host "DefaultGrouptag is 'Geen', er wordt geen bewerking uitgevoerd."
        }
    }
    else {
        Write-Error "Er is iets misgegaan bij het aanmaken van het CSV-bestand."
        return
    }

    # Verstuur de e-mail
    $Attachment = $OutputFilePath
    Write-Host "Versturen van e-mail met de hardware-hash..."
    
    $Credential = Get-Credential

    Send-MailMessage -From $EmailFrom `
                     -To $EmailTo `
                     -Subject $Subject `
                     -Body $Body `
                     -SmtpServer $SMTPServer `
                     -Port $SMTPPort `
                     -UseSsl `
                     -Credential $Credential `
                     -Attachments $Attachment

    Write-Host "E-mail succesvol verzonden!"
}



function Invoke-AutoPilotConfigurationMail {
        [CmdletBinding()]
        param(
            [string]$OutputFilePath = $script:DefaultOutputFilePath,
            [string]$EmailFrom      = $script:DefaultEmailFrom,
            [string]$EmailTo        = $script:DefaultEmailTo,
            [string]$Subject        = $script:DefaultSubject,
            [string]$Body           = $script:DefaultBody,
            [string]$SMTPServer     = $script:DefaultMailServer,
            [int]$SMTPPort          = $script:DefaultMailServerPort,
            [string]$Grouptag       = $script:DefaultGrouptag
        )
        
    # Functie om de huidige configuratie weer te geven
    function Show-Configuration-Mail {
        Write-Host "Huidige configuratie:" -ForegroundColor Cyan
        Write-Host "1. DefaultOutputFilePath: $($script:DefaultOutputFilePath)"
        Write-Host "2. DefaultEmailFrom: $($script:DefaultEmailFrom)"
        Write-Host "3. DefaultEmailTo: $($script:DefaultEmailTo)"
        Write-Host "4. DefaultSubject: $($script:DefaultSubject)"
        Write-Host "5. DefaultBody: $($script:DefaultBody)"
        Write-Host "6. DefaultMailServer: $($script:DefaultMailServer)"
        Write-Host "7. DefaultMailServerPort: $($script:DefaultMailServerPort)"
        Write-Host "8. DefaultGrouptag: $($script:DefaultGrouptag)"
        Write-Host ""
    }
    # Functie voor het aanpassen van alle velden
    function Update-AllFields {
        Write-Host "Pas alle velden aan (laat leeg om de huidige waarde te behouden):" -ForegroundColor Yellow

        $input = Read-Host "Nieuwe waarde voor DefaultOutputFilePath (huidig: $($script:DefaultOutputFilePath))"
        if ($input -ne "") { $script:DefaultOutputFilePath = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultEmailFrom (huidig: $($script:DefaultEmailFrom))"
        if ($input -ne "") { $script:DefaultEmailFrom = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultEmailTo (huidig: $($script:DefaultEmailTo))"
        if ($input -ne "") { $script:DefaultEmailTo = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultSubject (huidig: $($script:DefaultSubject))"
        if ($input -ne "") { $script:DefaultSubject = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultBody (huidig: $($script:DefaultBody))"
        if ($input -ne "") { $script:DefaultBody = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultMailServer (huidig: $($script:DefaultMailServer))"
        if ($input -ne "") { $script:DefaultMailServer = $input }

        $input = Read-Host "Nieuwe waarde voor DefaultMailServerPort (huidig: $($script:DefaultMailServerPort))"
        if ($input -ne "") { $script:DefaultMailServerPort = $input }
        
        $input = Read-Host "Nieuwe waarde voor DefaultGrouptag (huidig: $($script:DefaultGrouptag))"
        if ($input -ne "") { $script:DefaultGrouptag = $input }
    }

    # Functie voor het aanpassen van een specifiek veld
    function Update-SpecificField {
        Write-Host "Kies het veld dat je wilt aanpassen:" -ForegroundColor Yellow
        Write-Host "1. DefaultOutputFilePath"
        Write-Host "2. DefaultEmailFrom"
        Write-Host "3. DefaultEmailTo"
        Write-Host "4. DefaultSubject"
        Write-Host "5. DefaultBody"
        Write-Host "6. DefaultMailServer"
        Write-Host "7. DefaultMailServerPort"
        Write-Host "8. DefaultGrouptag"
        $choice = Read-Host "Voer het nummer van het veld in dat je wilt aanpassen"
        switch ($choice) {
<# "1" {
                # Voorbeeld van aanroepen van de functie
                Save-CSVFileDialog
                $input = "$script:DefaultOutputFilePath"
                Start-Sleep -Seconds 5
                if ($input -ne "") { $script:DefaultOutputFilePath = $input }
            } #>

            "1" {
                $input = Read-Host "Nieuwe waarde voor DefaultOutputFilePath (huidig: $($script:DefaultOutputFilePath))"
                if ($input -ne "") { $script:DefaultOutputFilePath = $input }
            }
            "2" {
                $input = Read-Host "Nieuwe waarde voor DefaultEmailFrom (huidig: $($script:DefaultEmailFrom))"
                if ($input -ne "") { $script:DefaultEmailFrom = $input }
            }
            "3" {
                $input = Read-Host "Nieuwe waarde voor DefaultEmailTo (huidig: $($script:DefaultEmailTo))"
                if ($input -ne "") { $script:DefaultEmailTo = $input }
            }
            "4" {
                $input = Read-Host "Nieuwe waarde voor DefaultSubject (huidig: $($script:DefaultSubject))"
                if ($input -ne "") { $script:DefaultSubject = $input }
            }
            "5" {
                $input = Read-Host "Nieuwe waarde voor DefaultBody (huidig: $($script:DefaultBody))"
                if ($input -ne "") { $script:DefaultBody = $input }
            }
            "6" {
                $input = Read-Host "Nieuwe waarde voor DefaultMailServer (huidig: $($script:DefaultMailServer))"
                if ($input -ne "") { $script:DefaultMailServer = $input }
            }
            "7" {
                $input = Read-Host "Nieuwe waarde voor DefaultMailServerPort (huidig: $($script:DefaultMailServerPort))"
                if ($input -ne "") { $script:DefaultMailServerPort = $input }
            }
            "8" {
                $input = Read-Host "Nieuwe waarde voor DefaultGrouptag (huidig: $($script:DefaultGrouptag))"
                if ($input -ne "") { $script:DefaultGrouptag = $input }
            }
            Default {
                Write-Host "Ongeldige keuze." -ForegroundColor Red
            }
        }
    }

    # Hoofdmenu om de configuratie aan te passen of het script te starten
    function Show-Menu-Mail {
        [CmdletBinding()]
        param(
            [string]$OutputFilePath = $script:DefaultOutputFilePath,
            [string]$EmailFrom      = $script:DefaultEmailFrom,
            [string]$EmailTo        = $script:DefaultEmailTo,
            [string]$Subject        = $script:DefaultSubject,
            [string]$Body           = $script:DefaultBody,
            [string]$SMTPServer     = $script:DefaultMailServer,
            [int]$SMTPPort          = $script:DefaultMailServerPort,
            [string]$Grouptag       = $script:DefaultGrouptag
        )
        do {
            Clear-Host
            Show-Configuration-Mail
            Write-Host "===============================" -ForegroundColor Gray
            Write-Host " SUB-MENU - Configuratie " -ForegroundColor Yellow
            Write-Host "===============================" -ForegroundColor Gray
            Write-Host "Menu:" -ForegroundColor Green
            Write-Host "1. Alle velden aanpassen"
            Write-Host "2. Specifiek veld aanpassen"
            Write-Host "3. Verstuur nu de mail met CSV" -ForegroundColor DarkGray
            Write-Host ""
            Write-Host "q. Hoofdmenu"
            Write-Host "-------------------------------"
            Write-Host ""
            $menuChoice = Read-Host "Maak een keuze (1 t/m 3 of q)"

            switch ($menuChoice) {
                "1" { Update-AllFields }
                "2" { Update-SpecificField }
                "3" { Get-AutoPilotHashAndSendMail; return }
                "q" { return }
                Default { Write-Host "Ongeldige keuze, probeer het opnieuw." -ForegroundColor Red; Start-Sleep -Seconds 2 }
            }
        } while ($true)
    }
    # Start alleen het menu (Show-Menu-Mail)
    Show-Menu-Mail
}



    function Get-AutoPilotHashAsFile {
        [CmdletBinding()]
        param(
            [string]$OutputFilePath = $script:DefaultOutputFilePath,
            [string]$EmailFrom      = $script:DefaultEmailFrom,
            [string]$EmailTo        = $script:DefaultEmailTo,
            [string]$Subject        = $script:DefaultSubject,
            [string]$Body           = $script:DefaultBody,
            [string]$SMTPServer     = $script:DefaultMailServer,
            [int]$SMTPPort          = $script:DefaultMailServerPort,
            [string]$Grouptag       = $script:DefaultGrouptag
        )

        # Controleer of Get-WindowsAutoPilotInfo.ps1 is geïnstalleerd
        if (-not (Get-Command Get-WindowsAutoPilotInfo.ps1 -ErrorAction SilentlyContinue)) {
            Write-Host "Get-WindowsAutoPilotInfo.ps1 wordt geïnstalleerd..."
            Install-Script -Name Get-WindowsAutoPilotInfo -Force
        }

        Write-Host "Het ophalen van de hardware-hash begint..."
        Get-WindowsAutoPilotInfo.ps1 -OutputFile $OutputFilePath

        # Controleer of het CSV-bestand is aangemaakt
        if (Test-Path $OutputFilePath) {
            Write-Host "Het CSV-bestand is succesvol aangemaakt: $OutputFilePath"
            
            # Alleen bewerken als Grouptag niet "Geen" is
            if ($Grouptag -ne "Geen") {
                Write-Host "Bewerken van CSV-bestand: toevoegen van kolom 'Group Tag'..."
                $csvData = @(Import-Csv -Path $OutputFilePath)

                if ($csvData.Count -gt 0) {
                    # Verkrijg de kolomnamen in volgorde
                    $columns = $csvData[0].PSObject.Properties.Name

                    $newData = foreach ($row in $csvData) {
                        $orderedObj = [ordered]@{}

                        # Voeg alle bestaande kolommen toe
                        foreach ($col in $columns) {
                            $orderedObj[$col] = $row.$col
                        }

                        # Voeg de nieuwe kolom toe aan het einde
                        $orderedObj["Group Tag"] = $Grouptag

                        # Zet het ordered hashtable om in een PSCustomObject zodat de headers correct worden weergegeven
                        [PSCustomObject]$orderedObj
                    }

                    # Sla het gewijzigde CSV-bestand op dezelfde locatie op
                    $newData | Export-Csv -Path $OutputFilePath -NoTypeInformation
                    Write-Host "CSV-bestand aangepast met Group Tag."
                }

                else {
                    Write-Host "CSV-bestand is leeg, er wordt geen bewerking uitgevoerd."
                }
            }
            else {
                Write-Host "DefaultGrouptag is 'Geen', er wordt geen bewerking uitgevoerd."
            }
        }
        else {
            Write-Error "Er is iets misgegaan bij het aanmaken van het CSV-bestand."
            return
        }
    }

<# function Save-CSVFileDialog {
        [CmdletBinding()]
        param(
            [string]$OutputFilePath = $script:DefaultOutputFilePath,
            [string]$EmailFrom = $script:DefaultEmailFrom,
            [string]$EmailTo = $script:DefaultEmailTo,
            [string]$Subject = $script:DefaultSubject,
            [string]$Body = $script:DefaultBody,
            [string]$SMTPServer = $script:DefaultMailServer,
            [int]$SMTPPort = $script:DefaultMailServerPort,
            [string]$Grouptag = $script:DefaultGrouptag
        )
    # Laad de Windows Forms assembly
    Add-Type -AssemblyName System.Windows.Forms
 
    # Maak een nieuw SaveFileDialog object aan
    $saveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
    $saveFileDialog.Filter = "CSV bestanden (*.csv)|*.csv"
    $saveFileDialog.Title = "Kies een locatie om het CSV-bestand op te slaan"
 
    # Toon het dialoogvenster
    if ($saveFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
        # Sla het pad op in de variabele
        $script:DefaultOutputFilePath = $saveFileDialog.FileName
        Write-Host "Huidig bestandspad: $script:DefaultOutputFilePath"
    }
    else {
        Write-Host "Dialoog geannuleerd. De oude locatie wordt behouden."
        Write-Host "Huidig bestandspad: $script:DefaultOutputFilePath"
        # De variabele blijft ongewijzigd, zodat de vorige locatie behouden blijft.
    }
}
 #>



    # Stel de standaard actieve GroupTag in
        # Definieer standaardvariabelen
$script:DefaultOutputFilePath    = "C:\AutoPilotHWID.csv"
$script:DefaultEmailFrom         = "nas@onne.nl"
$script:DefaultEmailTo           = "info@onne.nl"
$script:DefaultSubject           = "Windows Autopilot Hardware Hash"
$script:DefaultBody              = "Zie bijlage voor de hardware-hash."
$script:DefaultMailServer        = "smtp.office365.com"
$script:DefaultMailServerPort    = "587"
$script:DefaultGrouptag          = "Geen"  # Als deze op "Geen" staat, wordt het CSV niet bewerkt


function get-menu {
            [CmdletBinding()]
        param(
            [string]$OutputFilePath = $DefaultOutputFilePath,
            [string]$EmailFrom      = $DefaultEmailFrom,
            [string]$EmailTo        = $DefaultEmailTo,
            [string]$Subject        = $DefaultSubject,
            [string]$Body           = $DefaultBody,
            [string]$SMTPServer     = $DefaultMailServer,
            [int]$SMTPPort          = $DefaultMailServerPort,
            [string]$Grouptag       = $DefaultGrouptag
        )

    
    $activeGroupTag = "$($script:DefaultGrouptag)"
    
    function Show-Configuration-GroupTag {
        Write-Host "Huidige configuratie:" -ForegroundColor Cyan
        Write-Host " - DefaultGrouptag: $($script:DefaultGrouptag)"
        Write-Host " - DefaultOutputFilePath: $($script:DefaultOutputFilePath)"
        Write-Host "Voor volledige aanpassing in Configuratie, Selecteer je 5." -ForegroundColor DarkGray
    }
    do {
        Clear-Host
        Show-Configuration-GroupTag
        Write-Host "===============================" -ForegroundColor Gray
        Write-Host "HOOFDMENU - Device In Autopilot" -ForegroundColor Yellow
        Write-Host "===============================" -ForegroundColor Gray
        Write-Host -NoNewline "Actieve GroupTag:" -ForegroundColor Cyan
        if ("$($script:DefaultGrouptag)" -eq "geen") {
            Write-Host "$($script:DefaultGrouptag)" -ForegroundColor Red
        } else {
            Write-Host "$($script:DefaultGrouptag)" -ForegroundColor Gray
        }
        Write-Host ""
        Write-Host "Menu:" -ForegroundColor Green
        Write-Host "1. Windows Device aanmelden in Autopilot Intune Online"
        Write-Host "2. Windows Device Hascode genereren lokaal als CSV"
        Write-Host "3. Windows Device Hascode opsturen per mail met CSV bijlage"
        Write-Host "4. Alleen GroupTag toekennen"
        Write-Host "5. Configuratie aanpassen"
        Write-Host ""
        Write-Host "q. Sluit menu."
        Write-Host "-------------------------------"
        Write-Host ""
        $choice = Read-Host "Maak een keuze (1 t/m 5 of q)"
    
        switch ($choice) {
            "1" {
                Write-Host "`nOptie 1 geselecteerd: Windows Device aanmelden in Autopilot Intune Online"
                # Voeg hier de benodigde code toe voor deze optie.
                # Controleer of Get-WindowsAutoPilotInfo.ps1 is geïnstalleerd
                if (-not (Get-Command Get-WindowsAutoPilotInfo.ps1 -ErrorAction SilentlyContinue)) {
                    Write-Host "Get-WindowsAutoPilotInfo.ps1 wordt geïnstalleerd..."
                    Install-Script -Name Get-WindowsAutoPilotInfo -Force
                }
                Get-WindowsAutoPilotInfo.ps1 -Online -GroupTag "$($script:DefaultGrouptag)"
                Read-Host "Druk op Enter om door te gaan..."
            }
            "2" {
                Write-Host "`nOptie 2 geselecteerd: Windows Device Hascode genereren lokaal als CSV"
                # Voeg hier de code toe voor het genereren van de CSV.
                Get-AutoPilotHashAsFile -OutputFilePath "$($script:DefaultOutputFilePath)" -Grouptag "$($script:DefaultGrouptag)"
                Read-Host "Druk op Enter om door te gaan..."
            }
            "3" {
                Write-Host "`nOptie 3 geselecteerd: Windows Device Hascode opsturen per mail met CSV bijlage"
                # Voeg hier de code toe voor het versturen van de CSV per mail.
                Get-AutoPilotHashAndSendMail -Grouptag "$($script:DefaultGrouptag)"
                Read-Host "Druk op Enter om door te gaan..."
            }
            "4" {
                Write-Host "`nOptie 4 geselecteerd: GroupTag toekennen"
                Write-Host "Kies een GroupTag:"
                Write-Host "1. Geen"
                Write-Host "2. Personal"
                Write-Host "3. Shared"
                Write-Host "4. Kiosk"
            
                $groupChoice = Read-Host "Maak een keuze (1-4)"
                switch ($groupChoice) {
                    "1" { $script:DefaultGrouptag = "Geen" }
                    "2" { $script:DefaultGrouptag = "Personal" }
                    "3" { $script:DefaultGrouptag = "Shared" }
                    "4" { $script:DefaultGrouptag = "Kiosk" }
                    default {
                        Write-Host "Ongeldige keuze. Probeer het opnieuw." -ForegroundColor Red; Start-Sleep -Seconds 2 
                        Read-Host "Druk op Enter om door te gaan..."
                    }
                }
            }
            "5" {
                Write-Host "`nOptie 5 geselecteerd: Configuratie aanpassen"
                # Voeg hier de code toe voor het versturen van de CSV per mail.
                Invoke-AutoPilotConfigurationMail -Grouptag "$($script:DefaultGrouptag)"
                Read-Host "Druk op Enter om door te gaan..."
            }
            "q" {
                Write-Host "`nMenu wordt afgesloten."
                return  # Hiermee verlaat je de functie en sluit je het menu.
            }
            default {
                Write-Host "`nOngeldige keuze. Probeer het opnieuw." -ForegroundColor Red; Start-Sleep -Seconds 2 
                Read-Host "Druk op Enter om door te gaan..." 
            }
        }
    } while ($true)
}

# Roep de functie aan om het menu te starten.
# Show-Menu-Intune
Export-ModuleMember -Function get-menu