BitLocker Status and Recovery Key Audit
Summary
This script collects BitLocker encryption details for each drive on the system using the Get-BitLockerVolume cmdlet. It summarizes the protection status, key protector types, encryption percentage, and recovery password (if available). The output is formatted as a single string suitable for saving into the Endpoint-Level custom field BitLocker Status and Key. It is recommended to schedule this script to run once per day to keep the information up-to-date.
Output Format: | DriveLetter: KeyProtectorTypes; ProtectionStatus; EncryptionPercentage; RecoveryPassword |
Example: | C: RecoveryPassword, TPM; Enabled; 100%; <RecoveryPassword> | D: Not Enabled |
Notes: The BitLocker Drive Encryption feature must be enabled on servers to run this script against windows servers. Auditing will not work without enabling this feature.
Sample Run

Dependencies
- Custom Field - BitLocker Status and Key
- Group - BitLocker Status Audit Enabled
- Solution - BitLocker Status and Recovery Key Audit
Task Setup Path
Tasks Path: AUTOMATION ➞ Tasks
Task Type: Script Editor
Task Creation
Description
- Name: BitLocker Status and Recovery Key Audit
- Description: This script collects BitLocker encryption details for each drive on the system using the Get-BitLockerVolume cmdlet. It summarizes the protection status, key protector types, encryption percentage, and recovery password (if available). The output is formatted as a single string suitable for saving into the Endpoint-Level custom field "BitLocker Status and Key".
- Category: Data Collection

Script Editor
Step 1: Row -> PowerShell script
- Use Generative AI Assist for script creation: False
- Expected time of script execution in seconds: 300
- Operating System: Windows
- Continue on Failure: False
- Run As: System
- PowerShell Script Editor:
<#
.SYNOPSIS
    Retrieves BitLocker status and key information for all volumes on the device.
.DESCRIPTION
    This script collects BitLocker encryption details for each drive on the system using the Get-BitLockerVolume cmdlet.
    It summarizes the protection status, key protector types, encryption percentage, and recovery password (if available).
    The output is formatted as a single string suitable for saving into the Endpoint-Level custom field "BitLocker Status and Key".
.OUTPUTS
    A formatted string summarizing BitLocker status for each drive.
    Format: | DriveLetter: KeyProtectorTypes; ProtectionStatus; EncryptionPercentage; RecoveryPassword |
    | C: RecoveryPassword, TPM; Enabled; 100%; <RecoveryPassword> | D: Not Enabled |
.NOTES
    - If the BitLocker module is unavailable, the script returns a message indicating so.
    - If the output string exceeds 300 characters, it is truncated to fit the custom field limit.
    - The script is intended for use in environments where BitLocker status needs to be reported centrally.
.EXAMPLE
    # Save BitLocker status to a custom field
    $status = .\Get-BitlockerInfoCWRMM.ps1
    # Assign $status to the "BitLocker Status and Key" field in your endpoint management system.
#>
if (!(Get-Command -Name 'Get-BitLockerVolume' -ErrorAction SilentlyContinue)) {
    return '| BitLocker module is unavailable on this device. |'
}
$bitlockerInfo = Get-BitLockerVolume
$bitlockerInfoOutput = @()
if ($bitlockerInfo) {
    foreach ($drive in $bitlockerInfo) {
        $letter = $drive.MountPoint.TrimEnd(':')
        $keyProtector = $($drive.KeyProtector.KeyProtectorType -join ', ')
        $protectionStatus = switch ($drive.ProtectionStatus) {
            'On' { 'Enabled' }
            'Off' { 'Suspended' }
            default { 'Unknown' }
        }
        $encryptionPercentage = $drive.EncryptionPercentage
        $recoveryPassword = (($drive.KeyProtector | Where-Object { $_.KeyProtectorType -eq 'RecoveryPassword' }).RecoveryPassword | Select-Object -First 1)
        $recoveryPassword = if ($recoveryPassword) { $recoveryPassword } else { 'Not Available' }
        if (!$keyProtector) {
            $bitlockerInfoOutput += '{0}: Disabled' -f $letter
        } else {
            $bitlockerInfoOutput += '{0}: {1}; {2}; {3}%; {4}' -f $letter, $keyProtector, $protectionStatus, $encryptionPercentage, $recoveryPassword
        }
    }
} else {
    $bitlockerInfoOutput = 'Disabled'
}
$bitlockerReturnString = $($bitlockerInfoOutput -join ' | ')
if ($bitlockerReturnString.Length -le 300) {
    $bitlockerReturnInfo = $bitlockerReturnString
} else {
    $bitlockerReturnInfo = $bitlockerReturnString.Substring(0, 295)
}
return '| {0} |' -f $bitlockerReturnInfo

Step 2: Row -> Script Log
- Script Log Message: %Output%
- Continue on Failure: False
- Operating System: Windows
Step 3: Row -> Set Custom Field ( BitLocker Status and Key = %output% )
- Custom Field: BitLocker Status and Key
- Value: %Output%
- Continue on Failure: False
- Operating System: Windows
Completed Task

Output
- Script Log
- Custom Field
Schedule Task
Task Details
- Name: BitLocker Status and Recovery Key Audit
- Description: This script collects BitLocker encryption details for each drive on the system using the Get-BitLockerVolume cmdlet. It summarizes the protection status, key protector types, encryption percentage, and recovery password (if available). The output is formatted as a single string suitable for saving into the Endpoint-Level custom field "BitLocker Status and Key".
- Category: Data Collection

Schedule
- Schedule Type:  Schedule
- Timezone: Local Machine Time
- Start: <Current Date>
- Trigger: TimeAt<Current Time>
- Recurrence: Every day
Targeted Resource
Device Group: BitLocker Status Audit Enabled

Completed Scheduled Task
