217 lines
8.1 KiB
PowerShell
217 lines
8.1 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
|
|
|
|
# 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"
|