How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune

Key Takeaways

  • Secure Boot certificates used by Windows are expiring in June 2026, requiring organizations to deploy the newer 2023 certificates.
  • Microsoft provides a built-in Intune policy (Enable Secure Boot Certificate Updates) to automate this process.
  • When deployed, many devices report Intune Error 65000.
  • On the device, the Enterprise Device Management event log reveals the real cause:
  • Policy is rejected by licensing (0x82B00006).

Secure Boot is a Windows security feature that ensures your device starts using only trusted software. It works with UEFI firmware and uses digital certificates (called certificate authorities or CAs) to verify that boot components are legitimate and not tampered with by malware. These certificates have expiration dates, and the older Secure Boot certificates issued in 2011 are set to expire in June 2026.

Table of Contents

Secure Boot Status Report in Windows Autopatch

The Secure Boot status report in Windows Autopatch helps administrators quickly understand the Secure Boot health of their managed devices. This report gives a device-level overview of Secure Boot for all devices managed by Windows Autopatch. The Boot Status Report Helps You Understand the following.

Note – Devices with Secure Boot disabled do not require any action from a certificate update perspective. Devices with Secure Boot enabled but not updated may require administrative review to ensure certificate updates are applied and the device remains secure and compliant.

  • Which devices have Secure Boot enabled
  • Which Secure Boot-enabled devices are fully up to date
  • Which Secure Boot-enabled devices require certificate updates
Path to Access the Report
Go to Reports
Select Windows Autopatch
Click Windows quality updates
Click the Report tab
Select Secure Boot status
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.1
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.1

Secure Boot Status Report

The Secure Boot status report in Windows Autopatch provides visibility into devices that have Secure Boot enabled and identifies whether they are using Microsoft Secure Boot certificates that are set to expire in 2026.

Patch My PC

To remain secure and compliant, affected devices must be updated with the latest UEFI Secure Boot DB and KEK certificates. This report helps administrators quickly determine which devices are up to date, not applicable, or require attention.

  • The dashboard displays:
    • Total device count
    • Devices that are up to date
    • Devices are not up to date
    • Devices marked as not applicable
    • Secure Boot enabled status per device
    • Certificate update status
    • OS version and device model details
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.2
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.2

Why Use Microsoft Intune Remediations to Monitor Secure Boot 2011 Certificate Expiry

With Microsoft Secure Boot 2011 CAs expiring from June 2026, organizations must ensure all Secure Boot-enabled Windows devices are updated to the 2023 certificates before the deadline. Instead of immediately pushing changes to production devices, using Microsoft Intune Remediations in monitoring-only mode provides a safer and more controlled approach.

  • This method allows administrators to assess the current certificate status across all Intune-enrolled Windows devices without making any modifications.
  • The detection script gathers Secure Boot and certificate details and reports them centrally in the Intune portal.
  • This helps teams identify impacted devices, measure update readiness, export reports for compliance tracking, and plan phased remediation in alignment with change management processes, reducing risk while maintaining visibility and control.
BenefitDescription
Device-wide visibility See every Intune-enrolled Windows device’s certificate status in one place
Exportable Export results to CSV directly from the Intune portal
Raw registry valuesSee actual registry data, not just pass/fail
Device context Includes manufacturer, model, BIOS version, and firmware type
Event log telemetry Captures Secure Boot event IDs (1801/1808), bucket IDs, and confidence levels
Zero touchSee every Intune-enrolled Windows device’s certificate status in one place
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Table 1

Secure Boot Certificate Monitoring

This detection script is designed to collect Secure Boot and certificate update information from Windows devices using Microsoft Intune Remediations. It works in monitoring mode only, meaning it checks and reports the status without making any changes to the device.

The script gathers detailed inventory data and sends the results back to the Intune portal in JSON format. Administrators can review the output under Remediations > Monitor > Device status > Pre-remediation detection output and export the results to CSV for reporting and analysis.

  • What the Script Collects
    • Registry Data
      • Secure Boot certificate update status
      • Servicing keys
      • Device attributes
      • Opt-in / opt-out configuration
      • Path: HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot
    • WMI / CIM Information
      • Windows OS version
      • Last boot time
      • Baseboard (hardware) details
    • Event Log Entries
      • System Event ID 1801
      • System Event ID 1808
      • Related to Secure Boot update events
Important Notes
No certificate updates are performed
No device configuration is modified
No remediation script is required
Script is for monitoring and reporting only

Create the Secure Boot Detection Script File for Intune Remediations

You can easily check which devices still have the old Secure Boot certificates. For this, you need a small PowerShell script. Microsoft provides a sample script in KB5072718 that can inspect each device, check the Secure Boot certificate status, and report the results back to Intune.

This script does not make any changes; it only detects and reports (detection-only). By deploying it through Intune Remediations, administrators gain a centralised view of which devices are ready and which will need updates before the 2026 certificate expires.

<#
.SYNOPSIS
    Detects Secure Boot certificate update status for fleet-wide monitoring.

.DESCRIPTION
    This detection script collects Secure Boot status, certificate update registry values,
    and device information. It outputs a JSON string for monitoring and reporting.

    Compatible with Intune Remediations, GPO-based collection, and other management tools.
    No remediation script is needed — this is monitoring only.

    Exit 0 = “Without issue”  (certificates updated)
    Exit 1 = “With issue”     (certificates not updated — informational only)

    Source: https://support.microsoft.com/en-us/topic/sample-secure-boot-inventory-data-collection-script-d02971d2-d4b5-42c9-b58a-8527f0ffa30b
    KB ID: 5072718

.NOTES
    Registry paths per https://aka.ms/securebootplaybook:
      HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot
      HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
#>

# 1. HostName
# PS Version: All | Admin: No | System Requirements: None
try {
    $hostname = $env:COMPUTERNAME
    if ([string]::IsNullOrEmpty($hostname)) {
        Write-Warning “Hostname could not be determined”
        $hostname = “Unknown”
    }
    Write-Host “Hostname: $hostname”
} catch {
    Write-Warning “Error retrieving hostname: $_”
    $hostname = “Error”
    Write-Host “Hostname: $hostname”
}

# 2. CollectionTime
# PS Version: All | Admin: No | System Requirements: None
try {
    $collectionTime = Get-Date
    if ($null -eq $collectionTime) {
        Write-Warning “Could not retrieve current date/time”
        $collectionTime = “Unknown”
    }
    Write-Host “Collection Time: $collectionTime”
} catch {
    Write-Warning “Error retrieving date/time: $_”
    $collectionTime = “Error”
    Write-Host “Collection Time: $collectionTime”
}

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled
# PS Version: 3.0+ | Admin: May be required | System Requirements: UEFI/Secure Boot capable system
try {
    $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop
    Write-Host “Secure Boot Enabled: $secureBootEnabled”
} catch {
    Write-Warning “Unable to determine Secure Boot status via cmdlet: $_”
    # Try registry fallback
    try {
        $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State” -Name UEFISecureBootEnabled -ErrorAction Stop
        $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled
        Write-Host “Secure Boot Enabled: $secureBootEnabled”
    } catch {
        Write-Warning “Unable to determine Secure Boot status via registry. System may not support UEFI/Secure Boot.”
        $secureBootEnabled = $null
        Write-Host “Secure Boot Enabled: Not Available”
    }
}

# 4. HighConfidenceOptOut
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot” -Name HighConfidenceOptOut -ErrorAction Stop
    $highConfidenceOptOut = $regValue.HighConfidenceOptOut
    Write-Host “High Confidence Opt Out: $highConfidenceOptOut”
} catch {
    Write-Warning “HighConfidenceOptOut registry key not found or inaccessible”
    $highConfidenceOptOut = $null
    Write-Host “High Confidence Opt Out: Not Available”
}

# 5. AvailableUpdates
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot” -Name AvailableUpdates -ErrorAction Stop
    $availableUpdates = $regValue.AvailableUpdates
    if ($null -ne $availableUpdates) {
        # Convert to hexadecimal format
        $availableUpdatesHex = “0x{0:X}” -f $availableUpdates
        Write-Host “Available Updates: $availableUpdatesHex”
    } else {
        Write-Host “Available Updates: Not Available”
    }
} catch {
    Write-Warning “AvailableUpdates registry key not found or inaccessible”
    $availableUpdates = $null
    Write-Host “Available Updates: Not Available”
}

# Registry: Servicing Key (3 values)

# 6. UEFICA2023Status
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023Status -ErrorAction Stop
    $uefica2023Status = $regValue.UEFICA2023Status
    Write-Host “Windows UEFI CA 2023 Status: $uefica2023Status”
} catch {
    Write-Warning “Windows UEFI CA 2023 Status registry key not found or inaccessible”
    $uefica2023Status = $null
    Write-Host “Windows UEFI CA 2023 Status: Not Available”
}

# 7. UEFICA2023Error
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023Error -ErrorAction Stop
    $uefica2023Error = $regValue.UEFICA2023Error
    Write-Host “UEFI CA 2023 Error: $uefica2023Error”
} catch {
    Write-Warning “UEFICA2023Error registry key not found or inaccessible”
    $uefica2023Error = $null
    Write-Host “UEFI CA 2023 Error: Not Available”
}

# 9. UEFICA2023ErrorEvent
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023ErrorEvent -ErrorAction Stop
    $uefica2023ErrorEvent = $regValue.UEFICA2023ErrorEvent
    Write-Host “UEFI CA 2023 Error Event: $uefica2023ErrorEvent”
} catch {
    $uefica2023ErrorEvent = $null
    Write-Host “UEFI CA 2023 Error Event: Not Available”
}

# Registry: Device Attributes (7 values)

# 10. OEMManufacturerName
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name OEMManufacturerName -ErrorAction Stop
    $oemManufacturerName = $regValue.OEMManufacturerName
    if ([string]::IsNullOrEmpty($oemManufacturerName)) {
        Write-Warning “OEMManufacturerName is empty”
        $oemManufacturerName = “Unknown”
    }
    Write-Host “OEM Manufacturer Name: $oemManufacturerName”
} catch {
    Write-Warning “OEMManufacturerName registry key not found or inaccessible”
    $oemManufacturerName = $null
    Write-Host “OEM Manufacturer Name: Not Available”
}

# 10. OEMModelSystemFamily
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name OEMModelSystemFamily -ErrorAction Stop
    $oemModelSystemFamily = $regValue.OEMModelSystemFamily
    if ([string]::IsNullOrEmpty($oemModelSystemFamily)) {
        Write-Warning “OEMModelSystemFamily is empty”
        $oemModelSystemFamily = “Unknown”
    }
    Write-Host “OEM Model System Family: $oemModelSystemFamily”
} catch {
    Write-Warning “OEMModelSystemFamily registry key not found or inaccessible”
    $oemModelSystemFamily = $null
    Write-Host “OEM Model System Family: Not Available”
}

# 11. OEMModelNumber
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name OEMModelNumber -ErrorAction Stop
    $oemModelNumber = $regValue.OEMModelNumber
    if ([string]::IsNullOrEmpty($oemModelNumber)) {
        Write-Warning “OEMModelNumber is empty”
        $oemModelNumber = “Unknown”
    }
    Write-Host “OEM Model Number: $oemModelNumber”
} catch {
    Write-Warning “OEMModelNumber registry key not found or inaccessible”
    $oemModelNumber = $null
    Write-Host “OEM Model Number: Not Available”
}

# 12. FirmwareVersion
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name FirmwareVersion -ErrorAction Stop
    $firmwareVersion = $regValue.FirmwareVersion
    if ([string]::IsNullOrEmpty($firmwareVersion)) {
        Write-Warning “FirmwareVersion is empty”
        $firmwareVersion = “Unknown”
    }
    Write-Host “Firmware Version: $firmwareVersion”
} catch {
    Write-Warning “FirmwareVersion registry key not found or inaccessible”
    $firmwareVersion = $null
    Write-Host “Firmware Version: Not Available”
}

# 13. FirmwareReleaseDate
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name FirmwareReleaseDate -ErrorAction Stop
    $firmwareReleaseDate = $regValue.FirmwareReleaseDate
    if ([string]::IsNullOrEmpty($firmwareReleaseDate)) {
        Write-Warning “FirmwareReleaseDate is empty”
        $firmwareReleaseDate = “Unknown”
    }
    Write-Host “Firmware Release Date: $firmwareReleaseDate”
} catch {
    Write-Warning “FirmwareReleaseDate registry key not found or inaccessible”
    $firmwareReleaseDate = $null
    Write-Host “Firmware Release Date: Not Available”
}

# 14. OSArchitecture
# PS Version: All | Admin: No | System Requirements: None
try {
    $osArchitecture = $env:PROCESSOR_ARCHITECTURE
    if ([string]::IsNullOrEmpty($osArchitecture)) {
        # Try registry fallback
        $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name OSArchitecture -ErrorAction Stop
        $osArchitecture = $regValue.OSArchitecture
    }
    if ([string]::IsNullOrEmpty($osArchitecture)) {
        Write-Warning “OSArchitecture could not be determined”
        $osArchitecture = “Unknown”
    }
    Write-Host “OS Architecture: $osArchitecture”
} catch {
    Write-Warning “Error retrieving OSArchitecture: $_”
    $osArchitecture = “Unknown”
    Write-Host “OS Architecture: $osArchitecture”
}

# 15. CanAttemptUpdateAfter (FILETIME)
# PS Version: All | Admin: May be required | System Requirements: None
try {
    $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes” -Name CanAttemptUpdateAfter -ErrorAction Stop
    $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter
    # Convert FILETIME to UTC DateTime — registry stores as REG_BINARY (byte[]) or REG_QWORD (long)
    if ($null -ne $canAttemptUpdateAfter) {
        try {
            if ($canAttemptUpdateAfter -is [byte[]]) {
                $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter, 0)
                $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime).ToUniversalTime()
            } elseif ($canAttemptUpdateAfter -is [long]) {
                $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter).ToUniversalTime()
            }
        } catch {
            Write-Warning “Could not convert CanAttemptUpdateAfter FILETIME to DateTime”
        }
    }
    Write-Host “Can Attempt Update After: $canAttemptUpdateAfter”
} catch {
    Write-Warning “CanAttemptUpdateAfter registry key not found or inaccessible”
    $canAttemptUpdateAfter = $null
    Write-Host “Can Attempt Update After: Not Available”
}

# Event Logs: System Log (5 values)

# 16-20. Event Log queries
# PS Version: 3.0+ | Admin: May be required for System log | System Requirements: None
try {
    $allEventIds = @(1801, 1808)
    $events = @(Get-WinEvent -FilterHashtable @{LogName=’System’; ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)

    if ($events.Count -eq 0) {
        Write-Warning “No Secure Boot events (1801/1808) found in System log”
        $latestEventId = $null
        $bucketId = $null
        $confidence = $null
        $event1801Count = 0
        $event1808Count = 0
        Write-Host “Latest Event ID: Not Available”
        Write-Host “Bucket ID: Not Available”
        Write-Host “Confidence: Not Available”
        Write-Host “Event 1801 Count: 0”
        Write-Host “Event 1808 Count: 0”
    } else {
        # 16. LatestEventId
        $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object -First 1
        if ($null -eq $latestEvent) {
            Write-Warning “Could not determine latest event”
            $latestEventId = $null
            Write-Host “Latest Event ID: Not Available”
        } else {
            $latestEventId = $latestEvent.Id
            Write-Host “Latest Event ID: $latestEventId”
        }

        # 17. BucketID – Extracted from Event 1801/1808
        if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {
            if ($latestEvent.Message -match ‘BucketId:\s*(.+)’) {
                $bucketId = $matches[1].Trim()
                Write-Host “Bucket ID: $bucketId”
            } else {
                Write-Warning “BucketId not found in event message”
                $bucketId = $null
                Write-Host “Bucket ID: Not Found in Event”
            }
        } else {
            Write-Warning “Latest event or message is null, cannot extract BucketId”
            $bucketId = $null
            Write-Host “Bucket ID: Not Available”
        }

        # 18. Confidence – Extracted from Event 1801/1808
        if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {
            if ($latestEvent.Message -match ‘BucketConfidenceLevel:\s*(.+)’) {
                $confidence = $matches[1].Trim()
                Write-Host “Confidence: $confidence”
            } else {
                Write-Warning “Confidence level not found in event message”
                $confidence = $null
                Write-Host “Confidence: Not Found in Event”
            }
        } else {
            Write-Warning “Latest event or message is null, cannot extract Confidence”
            $confidence = $null
            Write-Host “Confidence: Not Available”
        }

        # 19. Event1801Count
        $event1801Array = @($events | Where-Object {$_.Id -eq 1801})
        $event1801Count = $event1801Array.Count
        Write-Host “Event 1801 Count: $event1801Count”

        # 20. Event1808Count
        $event1808Array = @($events | Where-Object {$_.Id -eq 1808})
        $event1808Count = $event1808Array.Count
        Write-Host “Event 1808 Count: $event1808Count”
    }
} catch {
    Write-Warning “Error retrieving event logs. May require administrator privileges: $_”
    $latestEventId = $null
    $bucketId = $null
    $confidence = $null
    $event1801Count = 0
    $event1808Count = 0
    Write-Host “Latest Event ID: Error”
    Write-Host “Bucket ID: Error”
    Write-Host “Confidence: Error”
    Write-Host “Event 1801 Count: 0”
    Write-Host “Event 1808 Count: 0”
}

# WMI/CIM Queries (4 values)

# 21. OSVersion
# PS Version: 3.0+ (use Get-WmiObject for 2.0) | Admin: No | System Requirements: None
try {
    $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop
    if ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) {
        Write-Warning “Could not retrieve OS version”
        $osVersion = “Unknown”
    } else {
        $osVersion = $osInfo.Version
    }
    Write-Host “OS Version: $osVersion”
} catch {
    Write-Warning “Error retrieving OS version: $_”
    $osVersion = “Unknown”
    Write-Host “OS Version: $osVersion”
}

# 22. LastBootTime
# PS Version: 3.0+ (use Get-WmiObject for 2.0) | Admin: No | System Requirements: None
try {
    $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop
    if ($null -eq $osInfo -or $null -eq $osInfo.LastBootUpTime) {
        Write-Warning “Could not retrieve last boot time”
        $lastBootTime = $null
        Write-Host “Last Boot Time: Not Available”
    } else {
        $lastBootTime = $osInfo.LastBootUpTime
        Write-Host “Last Boot Time: $lastBootTime”
    }
} catch {
    Write-Warning “Error retrieving last boot time: $_”
    $lastBootTime = $null
    Write-Host “Last Boot Time: Not Available”
}

# 23. BaseBoardManufacturer
# PS Version: 3.0+ (use Get-WmiObject for 2.0) | Admin: No | System Requirements: None
try {
    $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop
    if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {
        Write-Warning “Could not retrieve baseboard manufacturer”
        $baseBoardManufacturer = “Unknown”
    } else {
        $baseBoardManufacturer = $baseBoard.Manufacturer
    }
    Write-Host “Baseboard Manufacturer: $baseBoardManufacturer”
} catch {
    Write-Warning “Error retrieving baseboard manufacturer: $_”
    $baseBoardManufacturer = “Unknown”
    Write-Host “Baseboard Manufacturer: $baseBoardManufacturer”
}

# 24. BaseBoardProduct
# PS Version: 3.0+ (use Get-WmiObject for 2.0) | Admin: No | System Requirements: None
try {
    $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop
    if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) {
        Write-Warning “Could not retrieve baseboard product”
        $baseBoardProduct = “Unknown”
    } else {
        $baseBoardProduct = $baseBoard.Product
    }
    Write-Host “Baseboard Product: $baseBoardProduct”
} catch {
    Write-Warning “Error retrieving baseboard product: $_”
    $baseBoardProduct = “Unknown”
    Write-Host “Baseboard Product: $baseBoardProduct”
}

# =============================================================================
# Remediation Detection – Status Output & Exit Code
# =============================================================================

# Build status object from all collected inventory data
$status = [ordered]@{
    UEFICA2023Status           = $uefica2023Status
    UEFICA2023Error            = $uefica2023Error
    UEFICA2023ErrorEvent       = $uefica2023ErrorEvent
    AvailableUpdates           = if ($null -ne $availableUpdates) { $availableUpdatesHex } else { $null }
    Hostname                   = $hostname
    CollectionTime             = if ($collectionTime -is [datetime]) { $collectionTime.ToString(“o”) } else { “$collectionTime” }
    SecureBootEnabled          = $secureBootEnabled
    HighConfidenceOptOut       = $highConfidenceOptOut
    OEMManufacturerName        = $oemManufacturerName
    OEMModelSystemFamily       = $oemModelSystemFamily
    OEMModelNumber             = $oemModelNumber
    FirmwareVersion            = $firmwareVersion
    FirmwareReleaseDate        = $firmwareReleaseDate
    OSArchitecture             = $osArchitecture
    CanAttemptUpdateAfter      = if ($canAttemptUpdateAfter -is [datetime]) { $canAttemptUpdateAfter.ToString(“o”) } else { “$canAttemptUpdateAfter” }
    LatestEventId              = $latestEventId
    BucketId                   = $bucketId
    Confidence                 = $confidence
    Event1801Count             = $event1801Count
    Event1808Count             = $event1808Count
    OSVersion                  = $osVersion
    LastBootTime               = if ($lastBootTime -is [datetime]) { $lastBootTime.ToString(“o”) } else { “$lastBootTime” }
    BaseBoardManufacturer      = $baseBoardManufacturer
    BaseBoardProduct           = $baseBoardProduct
}

# Output the status – For data aggregation
Write-Output ($status | ConvertTo-Json -Compress)

# Exit code: “Updated” is the success value per the playbook
if ($secureBootEnabled -and $uefica2023Status -eq “Updated”) {
    exit 0  # Without issue
} else {
    exit 1  # With issue
}

Deploying the Secure Boot Detection Script as a Remediation in Intune

Once the detection script is ready, you can deploy it in Microsoft Intune as a Remediation script package. This allows Intune to collect Secure Boot certificate status from all assigned devices in a centralised, monitoring-only approach. Follow these steps to create and configure the Remediation. Follow these steps to create and configure the Remediation in Intune.

  • Sign in to the Microsoft Intune admin center
  • Navigate to Devices > Remediations
  • Click + Create script package
  • Set the following on the Basics tab: Name, Description
  • Publisher: (your organisation name)
  • Click Next
  • Set the following on the Settings tab:
    • Detection script file: Upload Detect-SecureBootCertificateStatus.ps1
    • Remediation script file: Leave empty (no remediation needed)
    • Run script using logged-on credentials: No (runs as SYSTEM for registry and UEFI access)
    • Enforce script signature check: No (set Yes only if your organization requires signed scripts)
    • Run script in 64-bit PowerShell: Yes (required for Confirm-SecureBootUEFI and registry reads)
    • Click Next
  • Add any scope tags required by your organization, or leave the default
  • Click Next
  • Assignments: Select device groups to monitor
  • Review all configured settings
  • Click Create to deploy the detection script for remediation in Intune

Note: The detection script runs on each device according to its Intune check-in schedule. After you assign the script, it may take up to 24 hours for the first run to complete

How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune 2
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune 11

Viewing and Exporting Secure Boot Detection Results in Intune

After the detection script runs, you can view the collected Secure Boot certificate data directly in the Intune portal. This allows administrators to track which devices are ready and which may need updates.

  • Navigate to Devices > Remediations
  • Click on Secure Boot Certificate Status Monitor (or the name you assigned)
  • Go to the Monitor tab
  • Click Device status to see the detailed output for each device
ColumnDescription
Device nameThe name of the device
Username The primary user of the device
Detection status Without issue (certs updated) or with issue (certs not updated)
Pre-remediation detection output The full JSON output from the script
Last modified When the script last ran on the device

Exporting Secure Boot Detection Results to CSV

You can easily export the device detection data from Intune to analyse it more easily in Excel or other tools. This helps you filter, sort, and review the Secure Boot certificate status across all devices.

  • On the Device status page, click the Export button at the top of the table
  • The CSV file will include all columns, including the full JSON detection output for each device
  • Open the CSV in Excel to filter, sort, and analyse the data

How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune

To prepare for this, Microsoft introduced new Secure Boot certificates in 2023. Many newer PCs already include these updated certificates, and for older devices, Microsoft is delivering them through regular Windows monthly updates along with firmware updates from device manufacturers. Installing these updates in advance ensures that Secure Boot continues to function correctly and that devices remain protected and able to boot normally after the older certificates expire.

  • Even though a device shows Windows Enterprise in Intune, Windows may still think it is Windows Pro if it was originally installed as Pro and later upgraded using subscription activation.
  • Subscription activation does not change the licensing decision
  • Because of this, Windows blocks the Secure Boot certificate update policy and shows Error 65000 – Policy is rejected by licensing. This does not mean you configured the policy wrong.
  • It is a known Microsoft issue where Windows internal licensing check stops the policy from applying.
  • Microsoft is working on a fix, and until then, many admins use PowerShell scripts from the community as a temporary workaround.
Here in the Secure Boot, you can see 3 Settings
Configure High Confidence Opt Out
Configure Microsoft Update Managed Opt In
Enable Secureboot Certificate Updates
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Table 1
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.1
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.1

Secure Boot Certificate Updates – Keeping Devices Protected

Secure Boot helps protect your devices from malware during startup, but its security depends on certificates that can expire over time. To keep devices secure, these certificates need to be updated or “rotated.” Microsoft has provided steps to do this, and Intune makes it easier by offering a built-in policy that automatically handles the Secure Boot certificate updates for your managed devices.

  • Configure High Confidence Opt Out – Disabled
  • Configure Microsoft Update Managed Opt In – Enabled
  • Enable Secureboot Certificate Updates – (Enabled) Initiates the deployment of new secure boot certificates and related updates.
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.2
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.2

Verifying Secure Boot Status Across Your Devices

Most devices made after 2012 support Secure Boot and usually have it enabled by default. There are different methods for verifying Secure Boot Status Across Your Devices.

  • GUI Method
    • Go to Start > Settings > Privacy & Security > Windows Security > Device Security.
    • Under Device Security, the Secure Boot section should indicate “On” if Secure Boot is enabled.
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.3
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.3

Confirm Secure Boot Using PowerShell

Open PowerShell as an administrator, type Confirm-SecureBootUEFI, and press Enter. If the command returns True, it confirms that Secure Boot is enabled on the device. The screenshots below give more details.

Confirm-SecureBootUEFI

How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.4
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.4

Checking Secure Boot in Large-Scale Deployments

When managing a large number of devices, IT teams need a way to verify whether Secure Boot is enabled across all systems. This ensures that any Secure Boot updates or policies are applied only to devices that support the feature.

# Initialize result object in preparation for checking Secure Boot state 

$result = [PSCustomObject]@{ 

   SecureBootEnabled = $null 

try { 

   $result.SecureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop 

   Write-Verbose “Secure Boot enabled: $($result.SecureBootEnabled)” 

} catch { 

   $result.SecureBootEnabled = $null 

   Write-Warning “Unable to determine Secure Boot status: $_” 

How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.5
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.5

Policy Rejected by Licensing (0x82B00006)

The 0x82B00006 error occurs when an Enterprise-only policy is assigned to a device running Windows Pro. This behaviour is well-known and has long existed. Settings such as RequirePrivateStoreOnly are supported only on Windows Enterprise, Education, or IoT Enterprise editions and are not licensed for Windows Pro.

When Intune attempts to apply these policies to a Pro device, the policy is automatically rejected because the Windows edition license does not support the feature, resulting in the error message “Policy is rejected by licensing (0x82B00006)”.

How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune - Fig.6
How to Fix Secure Boot Certificate Expiry and Renewal Error 65000 in Microsoft Intune – Fig.6

Need Further Assistance or Have Technical Questions?

Join the LinkedIn Page and Telegram group to get the latest step-by-step guides and news updates. Join our Meetup Page to participate in User group meetings. Also, Join the WhatsApp Community and WhatsApp Channel to get the latest news on Microsoft Technologies. We are there on Reddit as well.

Author

Anoop C Nair has been Microsoft MVP from 2015 onwards for 10 consecutive years! He is a Workplace Solution Architect with more than 22+ years of experience in Workplace technologies. He is also a Blogger, Speaker, and Local User Group Community leader. His primary focus is on Device Management technologies like SCCM and Intune. He writes about technologies like Intune, SCCM, Windows, Cloud PC, Windows, Entra, Microsoft Security, Career, etc.

Leave a Comment