← script library

Check BitLocker Encryption Status with PowerShell

Security & AuditingAugust 17, 2026

Reports volume status, protection status and encryption percentage for every BitLocker volume, and lists the key protectors on the ones that are protected. Hosts without the BitLocker feature exit with a clear message instead of an error, so this is safe to run across a mixed group.

powershell
# Check BitLocker Status
# Single use case: report encryption state of all fixed volumes
#-----------------------------------------------------------------

function Write-Log {
    param($Message)
    Write-Host "<WRITE-LOG = `"*$Message*`">"
}

if (-not (Get-Command Get-BitLockerVolume -ErrorAction SilentlyContinue)) {
    Write-Log "BitLocker cmdlets not available (feature not installed on this server)."
    return
}

$volumes = Get-BitLockerVolume -ErrorAction SilentlyContinue
if (-not $volumes) { Write-Log "No BitLocker volumes found."; return }

$unencrypted = 0
Write-Log "================ BitLocker Volumes ================"
foreach ($v in $volumes) {
    $line = "[$($v.MountPoint)] Status: $($v.VolumeStatus) Protection: $($v.ProtectionStatus) ($($v.EncryptionPercentage)% encrypted)"
    if ($v.ProtectionStatus -eq "On") {
        $protectors = ($v.KeyProtector | ForEach-Object { $_.KeyProtectorType }) -join ", "
        Write-Log "OK: $line - protectors: $protectors"
    } else {
        Write-Log "UNPROTECTED: $line"
        $unencrypted++
    }
}

if ($unencrypted -eq 0) {
    Write-Log "BitLocker check complete: all volumes protected."
} else {
    Write-Log "BitLocker check complete: $unencrypted volume(s) without active protection."
}

Run it across your fleet

This script runs as-is on a single host. Paste it into ServerEngine to schedule it, run it on a whole server group in parallel, and keep the credentials out of the file — see the scripts documentation and the credential store.

Ready when you are.

Try ServerEngine free for 7 days.