When running a Powershell script via GPO to enable Bitlocker. "A required privilege is not held by the client. (Exception from HRESULT: 0x80070522)"

Korazu DyShin 0 Reputation points
2025-08-29T15:28:01.6966667+00:00

We're moving towards using BitLocker for FDE to all of our users. Just got everything in GPO created, startup PowerShell script attached, and everything started moving fine in the initial testing of a few machines. Once I started to open that testing to a few more users, we started having a few issues.

Scenario #1: Machines that were being used in testing apparently had BitLocker already enabled but suspended as once the GPO was run on their devices, it encrypted immediately. When running manage-bde -status C: I found out that the drive was encrypted using "Used Space Only Encryption" and XTS-AES 128.

Scenario #2: Second set of machines that we opened up the testing to would not encrypt the drive. So when running get-bitlockervolume and manage-bde -status c: it shows the drive is fully decrypted and unlocked.

PS > get-bitlockervolume VolumeType      Mount CapacityGB VolumeStatus           Encryption KeyProtector              AutoUnlock Protection Point                                   Percentage                           Enabled    Status ----------      ----- ---------- ------------           ---------- ------------              ---------- ---------- OperatingSystem C:        471.56 FullyDecrypted         0          {}                                   Off

PS > manage-bde -status c: BitLocker Drive Encryption: Configuration Tool version 10.0.26100 Copyright (C) 2013 Microsoft Corporation. All rights reserved. Volume C: [Windows] [OS Volume] Size:                 471.56 GB BitLocker Version:    2.0 Conversion Status:    Fully Decrypted Percentage Encrypted: 0.0% Encryption Method:    None Protection Status:    Protection Off Lock Status:          Unlocked Identification Field: Unknown Key Protectors:       None Found

However, when it would run the GPO and the PowerShell script, it failed. I turned on logging and transcription, so I could figure out what the issue was. The GPO is running via Domain\System account, but failing due to a permissions error.

PS>CommandInvocation(Bitlocker_Encrypt_Workstation.ps1): "Bitlocker_Encrypt_Workstation.ps1" TpmReady : True RestartRequired : False ShutdownRequired : False ClearRequired : False PhysicalPresenceRequired : False


Windows PowerShell transcript start Start time: 20250828114453 Username: Domain\SYSTEM RunAs User: Domain\SYSTEM Configuration Name: Machine: GBO052L (Microsoft Windows NT 10.0.26100.0) Host Application: -ExecutionPolicy ByPass -File Bitlocker_Encrypt_Workstation.ps1 Process ID: 8380 PSVersion: 5.1.26100.4768 PSEdition: Desktop PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.26100.4768 BuildVersion: 10.0.26100.4768 CLRVersion: 4.0.30319.42000 WSManStackVersion: 3.0 PSRemotingProtocolVersion: 2.3 SerializationVersion: 1.1.0.1


PS>CommandInvocation(Out-String): "Out-String"

ParameterBinding(Out-String): name="InputObject"; value="A required privilege is not held by the client. (Exception from HRESULT: 0x80070522)" Add-TpmProtectorInternal : A required privilege is not held by the client. (Exception from HRESULT: 0x80070522) At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitLocker\BitLocker.psm1:2103 char:31

  • ... $Result = Add-TpmProtectorInternal $BitLockerVolumeInternal.MountPo ...
  • CategoryInfo : NotSpecified: (:) [Write-Error], COMException
  • FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-TpmProtectorInternal Add-TpmProtectorInternal : A required privilege is not held by the client. (Exception from HRESULT: 0x80070522) At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitLocker\BitLocker.psm1:2103 char:31
  • ... $Result = Add-TpmProtectorInternal $BitLockerVolumeInternal.MountPo ...
  • CategoryInfo : NotSpecified: (:) [Write-Error], COMException
  • FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-TpmProtectorInternal Add-TpmProtectorInternal : A required privilege is not held by the client. (Exception from HRESULT: 0x80070522) At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitLocker\BitLocker.psm1:2103 char:31
  • ... $Result = Add-TpmProtectorInternal $BitLockerVolumeInternal.MountPo ...
  • CategoryInfo : NotSpecified: (:) [Write-Error], COMException
  • FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-TpmProtectorInternal PS>TerminatingError(Backup-BitLockerKeyProtector): "Cannot validate argument on parameter 'KeyProtectorId'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again."

I even went as far as adding the Domain\System account to the GPO for Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> "Act as part of the operating system" to which it still failed. If the script is run locally, everything works as designed.

Script:

#Initialize TPM
Initialize-Tpm
#Enable Bitlocker
Enable-BitLocker -MountPoint "C:" -RecoveryPasswordProtector -SkipHardwareTest
#Key upload to AD
$keyID = Get-BitLockerVolume -MountPoint c: | select -ExpandProperty keyprotector |
            where {$_.KeyProtectorType -eq 'RecoveryPassword'}
Backup-BitLockerKeyProtector -MountPoint c: -KeyProtectorId $keyID.KeyProtectorId

I am trying to find a common denominator first, of why our golden image machines are not exactly the same with how they are configured, and secondly why some are working and some are not, but with the same GPO and script.

I am sure that we're going to have to turn off BitLocker on all the devices that are using the "Used Space Only Encryption" to be able to turn on FDE, which I fear will then lead us into scenario #2, with the permissions issue.

Windows for business | Windows Server | Directory services | Deploy group policy objects
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Domic Vo 11,150 Reputation points Independent Advisor
    2025-08-30T13:29:24.0166667+00:00

    Dear Korazu DyShin,

    The error 0x80070522 – A required privilege is not held by the client typically occurs when a script attempts to perform an operation that requires elevated permissions, but is executed under a context (such as Domain\SYSTEM) that lacks those privileges. While adding the account to “Act as part of the operating system” is a valid step, it may not be sufficient for BitLocker operations that require interactive or elevated access to TPM and key protector functions.

    Given that the script runs successfully when executed manually, we recommend the following:

    Consider deploying the script via a Scheduled Task with elevated privileges, set to run as SYSTEM but with “Run with highest privileges” enabled.

    Alternatively, use Intune or Endpoint Manager to deploy the script with proper execution context if your environment supports it.

    Ensure that the machines have consistent TPM configurations and that the encryption method is standardized (e.g., switching from “Used Space Only” to full disk encryption may require decryption and re-encryption).

    You may also want to review your golden image to ensure BitLocker is not pre-enabled or suspended, as this can lead to inconsistent behavior when applying GPOs.

    I hope this helps. Just kindly tick Accept Answer that others in the community facing similar issues can easily find the solution. Your contribution is highly appreciated.

    Best regards,

    Domic Vo

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.