Files
Powershell/scripts/enable-bitlocker.ps1
T
2025-10-29 11:23:02 +01:00

248 lines
9.3 KiB
PowerShell

# 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"