Photo by Marco GriepGeschrieben von Marco Griep
Die Verschlüsselung von Workstations ist ein zentraler Baustein der IT-Sicherheit – besonders in Unternehmen mit sensiblen Daten. BitLocker von Microsoft bietet hier als Windows Boardmittel eine robuste Lösung, doch die manuelle Aktivierung für jede Workstation ist zeitaufwendig. Besonders wenn dies nachträglich und Unternehmensweit sein soll. In diesem Artikel zeige ich dir, wie du BitLocker mit PowerShell und Ninja One automatisierst – inkl. Key-Reporting und Status-Tracking für maximale Kontrolle.
Wann dieser Artikel für dich eventuell relevant ist:
- Du nutzt Ninja One für dein IT-Management.
- Du willst BitLocker zentral aktivieren, ohne jeden Rechner manuell zu konfigurieren.
- Du möchtest die Sicherheit erhöhen, ohne stunden lange an jedem Gerät herumzuschrauben.
- Du willst den Überblick über den Verschlüsselungsstatus und die Recovery-Keys behalten.
- Du brauchst automatisierte Reports über den Verschlüsselungsstatus.
Du möchtest den Artikel lieber als Video schauen?
Dann findest du die Anleitung auch auf Youtube
1. Voraussetzungen & Vorbereitung
Bevor du startest, benötigst du:
- Ninja One-Konto mit Admin-Rechten
- PowerShell 5.1 oder höher auf den Ziel-Workstations
- BitLocker-fähige Hardware (TPM 2.0 empfohlen)
2. Benutzerdefinierte Felder in Ninja One einrichten
Erstelle in Ninja One folgende Custom Fields. Diese sind notwendig damit das PowerShell-Skript die BitLocker-Statusinformationen korrekt in Ninja One speichern kann:
Sätmliche Felder sind unter Geräte -> Benutzerdefinierte Felder des Gerätes zu konfigurieren.

Übersicht der benutzerdefinierten Felder:
| Feldname | Typ | Beschreibung |
|---|---|---|
bitlockerisactive | Kontrollkästen | Wenn "True", ist BitLocker aktiviert |
bitlockerRecoveryKey | Text | Speichert den Recovery-Key |
🔹 Tipp:
Nutze Ninja One-Automations, um bei Statusänderungen (z. B. "Deaktiviert").
Benachrichtigungen an dein IT-Team zu senden. Später erstellen wir eine bedingte Automatisierung um alle
Geräte zu
verschlüsseln, die noch nicht verschlüsselt sind.
3. PowerShell-Skript zur BitLocker-Überprüfung
Das folgende PowerShell-Skript prüft ob Bitlocker aktiviert und die Festplatte auch verschlüsselt ist. Dies ist unser Kontrollmechanismus und Steuerungsmöglichkeit für die bedingte Automatisierung.
Erstellen Sie dieses Skript in Ninja One als neues Skript und weisen Sie es einer bedingten Automatisierung zu, die auf
Workstations abzielt, bei denen das benutzerdefinierte Feld bitlockerisactive auf "False" gesetzt ist.
PowerShell-Skript: BitLocker-Status überprüfen (Bitlocker is Active Query)

$MountPoint = "C:"
$CustomField = "bitlockerisactive"
$NinjaCliPath = "C:\ProgramData\NinjaRMMAgent\ninjarmm-cli.exe"
function Log($msg) {
Write-Output "$(Get-Date -Format "yyyy-MM-dd HH:mm:ss") - $msg"
}
Log "Starte BitLocker Überprüfung für Laufwerk $MountPoint"
# BitLocker Status prüfen
$BL = Get-BitLockerVolume -MountPoint $MountPoint
# 1) Wenn BitLocker bereits geschützt ist
if ($BL.ProtectionStatus -eq "On" -and $BL.VolumeStatus -eq "FullyEncrypted") {
Log "BitLocker ist bereits geschützt (ProtectionStatus = On)."
& $NinjaCliPath set $CustomField "true"
}
else {
Log "BitLocker ist nicht geschützt."
& $NinjaCliPath set $CustomField "false"
}
Log "Script erfolgreich abgeschlossen."
exit 0
4. PowerShell-Skript zur BitLocker-Verschlüsslung
Das folgende PowerShell-Skript aktiviert BitLocker auf dem C-Laufwerk und speichert den Recovery-Key in einem benutzerdefinierten Feld.
PowerShell-Skript: BitLocker aktivieren und Recovery-Key speichern
$MountPoint = "C:"
$CustomField = "bitlockerRecoveryKey"
$NinjaCliPath = "C:\ProgramData\NinjaRMMAgent\ninjarmm-cli.exe"
function Log($msg) {
Write-Output "$(Get-Date -Format "yyyy-MM-dd HH:mm:ss") - $msg"
}
$hasError = $false
# BitLocker Status prüfen
$BL = Get-BitLockerVolume -MountPoint $MountPoint
# Funktion: RecoveryKey auslesen
function Get-RecoveryKey {
param($BLVolume)
return $BLVolume.KeyProtector |
Where-Object { $_.KeyProtectorType -eq "RecoveryPassword" } |
Select-Object -ExpandProperty RecoveryPassword
}
# 1) Wenn BitLocker bereits geschützt ist
if ($BL.ProtectionStatus -eq "On") {
Log "BitLocker ist bereits geschützt (ProtectionStatus = On)."
}
# 2) Wenn Volume verschlüsselt, aber Schutz OFF
elseif ($BL.VolumeStatus -eq "FullyEncrypted" -and $BL.ProtectionStatus -eq "Off") {
Log "Volume ist bereits verschlüsselt, ProtectionStatus ist OFF."
# Prüfe KeyProtectors
$hasTpm = $BL.KeyProtector | Where-Object { $_.KeyProtectorType -eq "Tpm" }
$hasRecovery = $BL.KeyProtector | Where-Object { $_.KeyProtectorType -eq "RecoveryPassword" }
try {
# Wenn TPM fehlt, hinzufügen
if (-not $hasTpm) {
Log "TPM Protector fehlt. Füge TPM Protector hinzu..."
Add-BitLockerKeyProtector -MountPoint $MountPoint -TpmProtector -ErrorAction Stop
} else {
Log "TPM Protector ist bereits vorhanden."
}
# Wenn Recovery fehlt, hinzufügen
if (-not $hasRecovery) {
Log "RecoveryPassword Protector fehlt. Füge RecoveryPassword hinzu..."
Add-BitLockerKeyProtector -MountPoint $MountPoint -RecoveryPasswordProtector -ErrorAction Stop
} else {
Log "RecoveryPassword Protector ist bereits vorhanden."
}
}
catch {
Log "Fehler beim Hinzufügen von Key Protectors: $_"
$hasError = $true
}
# Status neu laden
$BL = Get-BitLockerVolume -MountPoint $MountPoint
# 2a) Versuch Resume
if (-not $hasError) {
try {
Log "Versuche Resume-BitLocker..."
Resume-BitLocker -MountPoint $MountPoint -ErrorAction Stop
Start-Sleep -Seconds 10
$BL = Get-BitLockerVolume -MountPoint $MountPoint -ErrorAction Stop
if ($BL.ProtectionStatus -eq "On") {
Log "BitLocker Schutz erfolgreich aktiviert (Resume)."
}
else {
throw "Resume hat ProtectionStatus nicht auf On gesetzt."
}
}
catch {
Log "Resume fehlgeschlagen: $_"
$hasError = $true
}
}
# 2b) Wenn Resume fehlschlägt, Versuch Enable (nur wenn nicht geschützt)
if ($hasError -and $BL.ProtectionStatus -ne "On") {
try {
Log "Versuche Enable-BitLocker als Fallback..."
Enable-BitLocker -MountPoint $MountPoint -ErrorAction Stop
Start-Sleep -Seconds 10
$BL = Get-BitLockerVolume -MountPoint $MountPoint -ErrorAction Stop
if ($BL.ProtectionStatus -eq "On") {
Log "BitLocker Schutz erfolgreich aktiviert (Enable Fallback)."
$hasError = $false
}
else {
throw "Enable hat ProtectionStatus nicht auf On gesetzt."
}
}
catch {
Log "Enable fehlgeschlagen: $_"
$hasError = $true
}
}
}
# 3) Wenn nicht verschlüsselt -> Enable
else {
Log "BitLocker ist nicht verschlüsselt. Aktiviere BitLocker..."
try {
# Key Protectors hinzufügen (falls fehlen)
$hasTpm = $BL.KeyProtector | Where-Object { $_.KeyProtectorType -eq "Tpm" }
$hasRecovery = $BL.KeyProtector | Where-Object { $_.KeyProtectorType -eq "RecoveryPassword" }
if (-not $hasTpm) {
Log "TPM Protector fehlt. Füge TPM Protector hinzu..."
Add-BitLockerKeyProtector -MountPoint $MountPoint -TpmProtector -ErrorAction Stop
}
if (-not $hasRecovery) {
Log "RecoveryPassword Protector fehlt. Füge RecoveryPassword hinzu..."
Add-BitLockerKeyProtector -MountPoint $MountPoint -RecoveryPasswordProtector -ErrorAction Stop
}
Enable-BitLocker -MountPoint $MountPoint `
-EncryptionMethod XtsAes128 `
-RecoveryPasswordProtector `
-SkipHardwareTest `
-ErrorAction Stop
Start-Sleep -Seconds 10
$BL = Get-BitLockerVolume -MountPoint $MountPoint -ErrorAction Stop
if ($BL.ProtectionStatus -ne "On") {
throw "Schutz konnte nicht aktiviert werden."
}
Log "BitLocker Schutz erfolgreich aktiviert (Enable)."
}
catch {
Log "BitLocker Aktivierung fehlgeschlagen: $_"
$hasError = $true
}
}
# 4) Recovery Key auslesen (immer, wenn vorhanden)
$BL = Get-BitLockerVolume -MountPoint $MountPoint
$RecoveryKey = Get-RecoveryKey -BLVolume $BL
if (-not $RecoveryKey) {
Log "Kein Recovery Key gefunden."
$hasError = $true
} else {
# 5) Custom Field schreiben
try {
& $NinjaCliPath set $CustomField $RecoveryKey
Log "Recovery Key in Custom Field '$CustomField' geschrieben."
}
catch {
Log "Custom Field nicht verfügbar oder Fehler beim Schreiben: $_"
$hasError = $true
}
}
# 6) Exit Code
if ($hasError) {
Log "Script beendet mit Fehlern."
exit 1
}
Log "Script erfolgreich abgeschlossen."
5. Häufige Fehler & Lösungen
| Fehler | Ursache | Lösung |
|---|---|---|
| BitLocker lässt sich nicht aktivieren | TPM nicht aktiviert | TPM im BIOS aktivieren |
| Skript bricht mit API-Fehler ab | Falsche Berechtigungen. | Im benutzerdefinierten fehlen Berechtigungen. |
| Recovery-Key wird nicht gespeichert | Custom Field existiert nicht | Feld in Ninja One anlegen |