Enhancing Data Security with BitLocker Automation


Data is more valuable than ever in the digital age, and its protection is a primary concern for any business. This is why Enhancing Data Security with BitLocker Automation is paramount. One of the ways to protect data is through encryption, and Microsoft’s BitLocker provides robust full-disk encryption for the Windows platform. This blog post dives into a PowerShell script designed to automate BitLocker encryption, its benefits, and how to implement it via Group Policy. Additionally, we’ll explore the legal implications of data protection, focusing on the Information Commissioner’s Office (ICO) and the General Data Protection Regulation (GDPR).

What is BitLocker?

BitLocker is a full disk encryption feature included with Windows Vista and later. It is designed to protect data by providing encryption for entire volumes. By default, it uses the AES encryption algorithm in cipher block chaining (CBC) or XTS mode with a 128-bit or 256-bit key. CBC is not used over the whole disk; it is applied to each individual disk sector.

Here are the key features and benefits of BitLocker:

1. Full Disk Encryption: BitLocker encrypts all data on the system drive and on fixed data drives (such as internal hard drives). This means every file gets encrypted, including user data and system files. This provides high protection against data theft or exposure on computers and removable drives that are lost or stolen.

2. Multiple Authentication Modes: BitLocker supports several methods to authenticate a user before allowing access to the encrypted data, such as Trusted Platform Module (TPM), PIN, or USB key. The TPM is a hardware component installed in many newer computers by computer manufacturers. It works with BitLocker to help protect user data and ensure that a computer was not tampered with while the system was offline.

3. Recovery Mode: BitLocker provides a recovery mode to allow the user to access the encrypted data in case of any problems, such as if the TPM, PIN, or USB key is lost or if there are changes to key system files.

4. Integration with Windows: BitLocker is integrated into Windows and can be managed through standard Windows administrative tools. This integration provides a seamless user experience and makes it a convenient choice for securing data on Windows devices.

5. Network Unlock: BitLocker can automatically unlock operating system volumes at system restart when connected to a corporate network. This helps to maintain the balance between security and productivity.

6. Protection Against Cold Boot Attacks: BitLocker helps mitigate unauthorized data access by enhancing file and system protections. It also helps render data inaccessible when BitLocker-protected computers are decommissioned or recycled.

BitLocker provides peace of mind by ensuring your sensitive data is secure, even if your device gets lost or stolen. It is an essential tool for anyone with sensitive computer data that they want to protect.

Benefits of Using BitLocker

BitLocker offers several advantages, including:

  1. Data Protection: BitLocker encrypts the entire drive, safeguarding your data against unauthorized access.
  2. Recovery Options: BitLocker offers multiple options for data recovery in case of forgotten passwords or system issues.
  3. System Integrity Verification: BitLocker can verify the integrity of startup and boot configurations, preventing tampering with the system.

What Happens If You Don’t Use BitLocker?

Without BitLocker or similar encryption measures, your data is more susceptible to unauthorized access, especially in device theft or loss cases. This vulnerability could lead to severe consequences, including the exposure of sensitive personal or business information, which could further result in financial loss or reputational damage.

Automating BitLocker with PowerShell

The PowerShell script in this blog post automates the process of enabling BitLocker, ensuring that the encryption process resumes even after a system reboots and securely storing the recovery key in Active Directory. It significantly reduces manual labour and errors, ensuring a reliable and efficient encryption process.

So, how does it work?

Here’s a line-by-line explanation of the script:

  1. Check the encryption status of the C: drive: The script uses the Get-BitLockerVolume cmdlet to check the percentage of the drive that is encrypted. If the drive is fully encrypted (100%), it writes “Encryption is already in place” to the console and exits the script.
  2. Check for a TPM chip: The script uses the Get-WmiObject cmdlet to check if the device has a TPM (Trusted Platform Module) chip. The TPM is a chip that is used by BitLocker to store encryption keys. If the chip is not present or not enabled, the script writes “TPM chip is not present or not enabled. Exiting the script.” to the console and exits the script.
  3. Check for a CD/DVD in the drive: The script uses the Get-WmiObject cmdlet to check if there’s a CD or DVD in the drive. If there is, it ejects the CD/DVD, writes “CD/DVD is present in the drive. Ejecting the CD/DVD.” to the console, and pauses the script for 10 seconds.
  4. Re-check for a CD/DVD in the drive: The script rechecks for a CD/DVD in the drive. If there is still a CD/DVD present, it writes “CD/DVD is still present in the drive. Exiting the script.” to the console and exits the script.
  5. Create a directory and a local copy of the script: The script checks if the directory “C:\Scripts” exists, and if it doesn’t, it creates it. Then, it makes a copy of the script and stores it in the newly created directory.
  6. Check if a scheduled task exists: The script uses a custom function TaskExists to check if a scheduled task named “BitlockerTask” exists. This function uses the Schedule.Service COM object to connect to the Windows Task Scheduler and checks for the task.
  7. Create a new scheduled task: If the scheduled task does not exist, the script creates a new task to run the script at startup. The task runs with the SYSTEM account, and the script also starts the BitLocker encryption process using the manage-bde cmdlet.
  8. Wait for the encryption to complete: The script checks the encryption status again. If the drive is not fully encrypted, it enters a loop where it waits for 5 minutes (300 seconds) before checking the encryption status again.
  9. Enable auto-unlock and backup the BitLocker key: Once the drive is fully encrypted, the script enables the auto-unlock feature with the manage-bde cmdlet. It then gets the BitLocker key protector id and backs it up to Active Directory using the Backup-BitLockerKeyProtector cmdlet.
  10. Remove the scheduled task: Finally, the script removes the scheduled task since the encryption process is complete and the task is no longer needed. The Unregister-ScheduledTask cmdlet is used to remove the task without requiring confirmation.

Implementing the Script via Group Policy

Group Policy provides a convenient way to distribute and implement this script across multiple devices in an Active Directory domain. You can set the script as a startup script in a Group Policy Object (GPO), ensuring that it runs on all computers within the scope of the GPO.

Here is a more detailed explanation of how to implement the PowerShell script via Group Policy:

Step 1: Open Group Policy Management

  • Open the “Group Policy Management” tool. You can find this in your Start menu or by using the ‘Run’ dialog (Win + R) and typing gpmc.msc.

Step 2: Create a New Group Policy Object

  • Right-click on the “Group Policy Objects” folder and select “New”. Give the new GPO a descriptive name, such as “BitLocker Encryption”.

Step 3: Edit the GPO

  • Right-click on the newly created GPO and click “Edit”. This will open the Group Policy Management Editor.

Step 4: Navigate to Startup Scripts

  • In the Group Policy Management Editor, navigate to “Computer Configuration” > “Policies” > “Windows Settings” > “Scripts (Startup/Shutdown)”.

Step 5: Add the Script

  • Double-click on “Startup” to open its properties. Click on “Add” and then “Browse”. Navigate to the location of your PowerShell script and select it. Ensure the script is stored in a location accessible to all machines where the policy will be applied, such as a shared network drive.

Step 6: Close the Properties Window

  • Click “OK” to close the properties window.

Step 7: Link the GPO

  • Now, you need to link the GPO to the appropriate Organizational Unit (OU). Go back to the Group Policy Management window, right-click the desired OU, and click “Link an Existing GPO”. Choose the GPO you just created.

Step 8: Force a Group Policy Update (Optional)

  • On any computers to which the GPO should apply, open a command prompt and run gpupdate /force to force an immediate update of Group Policy. Otherwise, the new policy will be applied on the next reboot or after the standard Group Policy refresh interval.

With these steps, the script should run at startup for all computers in the OU to which you’ve linked the GPO.

Legal Implications: ICO and GDPR

Under the guidance of the ICO and the requirements of GDPR, businesses must take appropriate measures to safeguard personal data. Implementing full-disk encryption like BitLocker is one such measure. Failure to appropriately protect data can result in hefty fines under GDPR and could also lead to enforcement action from the ICO.


The automation of BitLocker through PowerShell and implementation via Group Policy offers an efficient, reliable method to enhance data security across multiple devices. It aligns with data protection requirements under ICO and GDPR and shields your organization from potential data breaches, protecting your business reputation and stakeholders’ trust.

The script

# Check the encryption status
$encryptionStatus = (Get-BitLockerVolume -MountPoint C:).EncryptionPercentage

# If the drive is already encrypted, exit the script
if ($encryptionStatus -eq 100) {
    Write-Output "Encryption is already in place"

# Check if the device has a TPM chip
$tpm = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm

# If the TPM chip is not present or not enabled, exit the script
if ($tpm -eq $null -or $tpm.IsEnabled().IsEnabled -eq $false) {
    Write-Output "TPM chip is not present or not enabled. Exiting the script."

# Check if there is a CD/DVD present
$cdDrive = Get-WmiObject -Class Win32_CDROMDrive

# If a CD/DVD is present, eject it and then sleep for 10 seconds
if ($cdDrive.MediaLoaded -eq $true) {
    $eject = New-Object -comObject Shell.Application
    Write-Output "CD/DVD is present in the drive. Ejecting the CD/DVD."
    Start-Sleep -Seconds 10

# Check again if there is a CD/DVD present
$cdDrive = Get-WmiObject -Class Win32_CDROMDrive
if ($cdDrive.MediaLoaded -eq $true) {
    Write-Output "CD/DVD is still present in the drive. Exiting the script."
# Create the directory if it doesn't exist
if (!(Test-Path -Path "C:\Scripts")) {
    New-Item -ItemType Directory -Path "C:\Scripts"

# Create a local copy of this script
$scriptPath = "C:\Scripts\BitlockerTask.ps1"
Copy-Item -Path $PSCommandPath -Destination $scriptPath -Force

# Function to check if the task exists
function TaskExists {
    param (
        [string] $TaskName

    $taskService = New-Object -ComObject Schedule.Service

    try {
        $task = $taskService.GetFolder('\').GetTask($TaskName)
        return $true
    } catch {
        return $false

# Check if the task exists
$taskName = "BitlockerTask"
if (-not (TaskExists -TaskName $taskName)) {
    # Create a new scheduled task to run this script at startup
    $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-File `"$scriptPath`""
    $trigger = New-ScheduledTaskTrigger -AtStartup
    $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $taskName -Description "Run BitLocker script at startup" -Principal $principal

    # Enable BitLocker on the C: drive with Recovery Password and Skip Hardware Test
    manage-bde -on C: -RecoveryPassword -SkipHardwareTest -UsedSpaceOnly

# Check the encryption status
$encryptionStatus = (Get-BitLockerVolume -MountPoint C:).EncryptionPercentage

# If the drive is currently encrypting, wait for the encryption to complete
if ($encryptionStatus -lt 100) {
    while ($encryptionStatus -lt 100) {
        Start-Sleep -Seconds 300
        $encryptionStatus = (Get-BitLockerVolume -MountPoint C:).EncryptionPercentage

# Enable auto-unlock
manage-bde -autounlock -enable C:

# Backup the BitLocker key to Active Directory
$keyID = (Get-BitLockerVolume -MountPoint C:).KeyProtector | Where-Object {$_.KeyProtectorType -eq 'RecoveryPassword'}
Backup-BitLockerKeyProtector -MountPoint C: -KeyProtectorId $keyID.KeyProtectorId

# Remove the scheduled task as the script has completed successfully
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false

Found priceless insights in this blog? Support the author’s creativity – buy them a coffee!

Leave a Reply

Your email address will not be published. Required fields are marked *