# BitLocker Encryption Script # Dit script versleutelt de systeemschijf met BitLocker en slaat het ontsleutelbestand op in de output map param( [string]$OutputPath = "..\output", [switch]$Force = $false ) # Functie om te controleren of het script als administrator wordt uitgevoerd function Test-Administrator { $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal($currentUser) return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } # Functie om te controleren of BitLocker beschikbaar is function Test-BitLockerAvailable { try { $bitlockerModule = Get-Module -ListAvailable -Name "BitLocker" if ($bitlockerModule) { Import-Module BitLocker -ErrorAction Stop return $true } return $false } catch { return $false } } # Functie om de systeemschijf te vinden function Get-SystemDrive { $systemDrive = Get-WmiObject -Class Win32_LogicalDisk | Where-Object { $_.DeviceID -eq "C:" } return $systemDrive } # Functie om BitLocker status te controleren function Get-BitLockerStatus { param([string]$DriveLetter) try { $bitlockerVolume = Get-BitLockerVolume -MountPoint $DriveLetter -ErrorAction Stop return $bitlockerVolume.VolumeStatus } catch { return "Unknown" } } # Functie om een willekeurige recovery key te genereren function New-RecoveryKey { $chars = "0123456789" $key = "" for ($i = 0; $i -lt 48; $i++) { $key += $chars[(Get-Random -Maximum $chars.Length)] } return $key } # Hoofdscript Write-Host "=== BitLocker Encryption Script ===" -ForegroundColor Cyan Write-Host "" # Controleren of het script als administrator wordt uitgevoerd if (-not (Test-Administrator)) { Write-Host "FOUT: Dit script moet als administrator worden uitgevoerd!" -ForegroundColor Red Write-Host "Start PowerShell opnieuw als administrator en voer het script opnieuw uit." -ForegroundColor Yellow Read-Host "Druk op Enter om af te sluiten" exit 1 } # Controleren of BitLocker beschikbaar is Write-Host "Controleren van BitLocker beschikbaarheid..." -ForegroundColor Yellow if (-not (Test-BitLockerAvailable)) { Write-Host "FOUT: BitLocker is niet beschikbaar op dit systeem!" -ForegroundColor Red Write-Host "BitLocker is alleen beschikbaar op Windows Pro, Enterprise of Education edities." -ForegroundColor Yellow Read-Host "Druk op Enter om af te sluiten" exit 1 } Write-Host "BitLocker is beschikbaar." -ForegroundColor Green # Bepaal output path - als relatief pad wordt gegeven, maak het absoluut if (-not [System.IO.Path]::IsPathRooted($OutputPath)) { # Get script directory with fallback $scriptDirPath = if ($MyInvocation.MyCommand.Path) { Split-Path -Parent $MyInvocation.MyCommand.Path } elseif ($PSCommandPath) { Split-Path -Parent $PSCommandPath } elseif ($PSScriptRoot) { $PSScriptRoot } else { # When executed via .cmd wrapper, PUSHD sets current directory $location = Get-Location if ($location -is [System.IO.DirectoryInfo]) { $location.FullName } else { $location.ToString() } } # Resolve relative path (e.g., "..\output" from scripts/ should go to root/output/) $resolvedPath = Resolve-Path (Join-Path $scriptDirPath $OutputPath) -ErrorAction SilentlyContinue if ($resolvedPath) { $OutputPath = $resolvedPath.Path } else { # Fallback: if resolving fails, try manual path construction $parentDir = Split-Path -Parent $scriptDirPath $relativePart = $OutputPath -replace '^\.\.\\', '' $OutputPath = Join-Path $parentDir $relativePart } } # Controleren of de output map bestaat if (-not (Test-Path $OutputPath)) { Write-Host "Output map wordt aangemaakt: $OutputPath" -ForegroundColor Yellow New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null } # Systeemschijf ophalen Write-Host "Systeemschijf wordt gecontroleerd..." -ForegroundColor Yellow $systemDrive = Get-SystemDrive if (-not $systemDrive) { Write-Host "FOUT: Kan systeemschijf niet vinden!" -ForegroundColor Red Read-Host "Druk op Enter om af te sluiten" exit 1 } Write-Host "Systeemschijf gevonden: $($systemDrive.DeviceID) ($($systemDrive.Size / 1GB) GB)" -ForegroundColor Green # BitLocker status controleren $bitlockerStatus = Get-BitLockerStatus -DriveLetter "C:" Write-Host "Huidige BitLocker status: $bitlockerStatus" -ForegroundColor Yellow if ($bitlockerStatus -eq "FullyDecrypted" -or $bitlockerStatus -eq "Unknown") { Write-Host "" Write-Host "WAARSCHUWING: Dit proces kan lang duren en vereist een systeemherstel!" -ForegroundColor Red Write-Host "- Het systeem moet opnieuw worden opgestart tijdens het proces" -ForegroundColor Yellow Write-Host "- Zorg ervoor dat alle belangrijke gegevens zijn opgeslagen" -ForegroundColor Yellow Write-Host "- Het proces kan enkele uren duren afhankelijk van de schijfgrootte" -ForegroundColor Yellow Write-Host "" if (-not $Force) { $confirm = Read-Host "Wilt u doorgaan? (ja/nee)" if ($confirm -ne "ja" -and $confirm -ne "j" -and $confirm -ne "yes" -and $confirm -ne "y") { Write-Host "Operatie geannuleerd door gebruiker." -ForegroundColor Yellow Read-Host "Druk op Enter om af te sluiten" exit 0 } } # Recovery key genereren Write-Host "Recovery key wordt gegenereerd..." -ForegroundColor Yellow $recoveryKey = New-RecoveryKey $recoveryKeyFile = Join-Path $OutputPath "bitlocker_$env:COMPUTERNAME.txt" # Recovery key opslaan $recoveryInfo = @" BitLocker Recovery Key ===================== Datum: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss") Computer: $env:COMPUTERNAME Schijf: C: Recovery Key: $recoveryKey BELANGRIJK: - Bewaar deze recovery key op een veilige plaats - Zonder deze key kunt u uw gegevens niet herstellen - Maak een backup van deze key op een andere locatie "@ $recoveryInfo | Out-File -FilePath $recoveryKeyFile -Encoding UTF8 Write-Host "Recovery key opgeslagen in: $recoveryKeyFile" -ForegroundColor Green # BitLocker versleuteling starten Write-Host "" Write-Host "BitLocker versleuteling wordt gestart..." -ForegroundColor Yellow Write-Host "Dit kan enkele uren duren. Het systeem wordt automatisch opnieuw opgestart." -ForegroundColor Yellow try { # BitLocker inschakelen met TPM + PIN Enable-BitLocker -MountPoint "C:" -RecoveryKeyProtector -RecoveryKeyPath $OutputPath -EncryptionMethod XtsAes256 -UsedSpaceOnly Write-Host "" Write-Host "BitLocker versleuteling is succesvol gestart!" -ForegroundColor Green Write-Host "Het systeem wordt binnen 10 seconden opnieuw opgestart..." -ForegroundColor Yellow # Log bestand maken $logFile = Join-Path $OutputPath "bitlocker-setup.log" $logInfo = @" BitLocker Setup Log ================== Datum: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss") Computer: $env:COMPUTERNAME Status: Versleuteling gestart Recovery Key File: $recoveryKeyFile "@ $logInfo | Out-File -FilePath $logFile -Encoding UTF8 # Systeem herstarten Start-Sleep -Seconds 10 Restart-Computer -Force } catch { Write-Host "FOUT bij het starten van BitLocker versleuteling: $($_.Exception.Message)" -ForegroundColor Red Read-Host "Druk op Enter om af te sluiten" exit 1 } } elseif ($bitlockerStatus -eq "FullyEncrypted") { Write-Host "BitLocker is al volledig ingeschakeld op dit systeem." -ForegroundColor Green # Recovery key ophalen als deze al bestaat try { $bitlockerVolume = Get-BitLockerVolume -MountPoint "C:" $recoveryKeyProtector = $bitlockerVolume.KeyProtector | Where-Object { $_.KeyProtectorType -eq "RecoveryPassword" } if ($recoveryKeyProtector) { $recoveryKeyFile = Join-Path $OutputPath "bitlocker_$env:COMPUTERNAME.txt" $recoveryInfo = @" Bestaande BitLocker Recovery Key =============================== Datum: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss") Computer: $env:COMPUTERNAME Schijf: C: Recovery Key: $($recoveryKeyProtector.RecoveryPassword) BELANGRIJK: - Deze recovery key was al gegenereerd tijdens de eerste BitLocker setup - Bewaar deze recovery key op een veilige plaats - Zonder deze key kunt u uw gegevens niet herstellen "@ $recoveryInfo | Out-File -FilePath $recoveryKeyFile -Encoding UTF8 Write-Host "Bestaande recovery key opgeslagen in: $recoveryKeyFile" -ForegroundColor Green } } catch { Write-Host "Kon bestaande recovery key niet ophalen: $($_.Exception.Message)" -ForegroundColor Yellow } } else { Write-Host "BitLocker is gedeeltelijk ingeschakeld. Status: $bitlockerStatus" -ForegroundColor Yellow Write-Host "Het wordt aanbevolen om het versleutelingsproces te voltooien via de Windows-instellingen." -ForegroundColor Yellow } Write-Host "" Write-Host "Script voltooid!" -ForegroundColor Green Read-Host "Druk op Enter om af te sluiten"