使用 PowerShell 从 Active Directory 导出 BitLocker 恢复密钥

Jacki

IT 出现故障,我们需要将所有系统置于安全模式并调整一些值。但是,它要求输入 BitLocker 密码。不幸的是,我们没有它,因此我们需要 BitLocker 恢复密钥才能进入系统。在本文中,您将了解如何使用 PowerShell 将 BitLocker 恢复密钥从 Active Directory 导出到 CSV 文件。

Windows 上的 BitLocker 恢复

启动系统时,它会要求输入 BitLocker 密码来解锁驱动器。我们没有这些信息。那么,让我们点击Esc键用于 BitLocker 恢复。

它要求提供 BitLocker 恢复密钥。

要获取 BitLocker 恢复密钥,您可以在 Active Directory 中搜索计算机,打开计算机属性,然后提取信息。

您还可以在 Active Directory 中搜索Bitlocker 恢复密钥 ID提取 BitLocker 恢复密码。

填写密码 ID 并提取 BitLocker 恢复密码。

如果您需要所有 BitLocker 恢复密钥的报告以加快该过程该怎么办?让我们在下一步中看看。

Export-BitLockerKeys.ps1 PowerShell 脚本会将所有计算机 BitLocker 恢复密钥从 Active Directory 导出到 CSV 文件,并为您提供包含以下信息的报告:

  1. 计算机名
  2. 恢复密码
  3. 恢复ID
  4. 日期
  5. 时间
  6. 专有名称
  7. 操作系统

下载 Export-BitLockerKeys.ps1 PowerShell 脚本并将其放入C:脚本文件夹。

确保文件未被阻止,以防止运行脚本时出现错误。请阅读文章运行 PowerShell 脚本时出现未数字签名错误来了解更多信息。

另一种选择是将以下代码复制并粘贴到记事本中。将其命名为 Export-BitLockerKeys.ps1 并将其放置在C:脚本文件夹。

建议阅读:使用 CSV 批量创建 Active Directory 用户

<#
    .SYNOPSIS
    Export-BitLockerKeys.ps1

    .DESCRIPTION
    Export BitLocker Recovery Keys from Active Directory for all computers or computers in a specific OU to CSV file.

    .LINK
    www.alitajran.com/export-bitlocker-recovery-keys-active-directory-powershell/

    .NOTES
    Written by: ALI TAJRAN
    Website:    alitajran.com
    X:          x.com/alitajran
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 09/25/2024 - Initial version
#>

param(
    # Full path for the CSV report (must be provided)
    [Parameter(Mandatory = $true)]
    [string]$OutputPath,

    # Organizational Unit to search for computers (it will search for all computers if not provided)
    [string]$OU = ""
)

# Get the current user's identity
$currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
# Create a principal object from the identity to check roles
$principal = [Security.Principal.WindowsPrincipal]::new($currentIdentity)

# Check if the current user is an administrator
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "Only Administrators can read BitLocker Recovery Keys." -ForegroundColor Red
    exit
}

# Determine the search base for computers
if ($OU -ne "") {
    $Computers = Get-ADComputer -Filter 'ObjectClass -eq "computer"' -Property Name, DistinguishedName, OperatingSystem -SearchBase $OU | Sort-Object Name
}
else {
    $Computers = Get-ADComputer -Filter 'ObjectClass -eq "computer"' -Property Name, DistinguishedName, OperatingSystem | Sort-Object Name
}

# Initialize report list
$report = [System.Collections.Generic.List[Object]]::new()

foreach ($computer in $Computers) {
    $params = @{
        Filter     = "objectclass -eq 'msFVE-RecoveryInformation'"
        SearchBase = $computer.DistinguishedName
        Properties = 'msFVE-RecoveryPassword', 'whencreated'
    }

    $bitlockerInfo = Get-ADObject @params | Sort-Object -Property WhenCreated -Descending | Select-Object -First 1

    if ($bitlockerInfo) {
        $ReportLine = [PSCustomObject][ordered]@{
            ComputerName      = $computer.Name
            RecoveryPassword  = $bitlockerInfo.'msFVE-RecoveryPassword'
            RecoveryID        = $bitlockerInfo.Name.Substring(26, 36)
            Date              = $bitlockerInfo.Name.Substring(0, 10)
            Time              = $bitlockerInfo.Name.Substring(11, 8)
            DistinguishedName = $Computer.DistinguishedName
            OperatingSystem   = $Computer.OperatingSystem
        }
        $report.Add($ReportLine)
    }
    else {
        $ReportLine = [PSCustomObject][ordered]@{
            ComputerName      = $computer.Name
            RecoveryPassword  = "No BitLocker information found"
            RecoveryID        = "N/A"
            Date              = "N/A"
            Time              = "N/A"
            DistinguishedName = $Computer.DistinguishedName
            OperatingSystem   = $Computer.OperatingSystem
        }
        $report.Add($ReportLine)
    }
}

# Export the list to CSV
try {
    $report | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding utf8
    Write-Host "Report successfully exported to: $OutputPath" -ForegroundColor Green
}
catch {
    Write-Host "Error exporting report to CSV: $_" -ForegroundColor Red -ErrorAction SilentlyContinue
}

这就是它的样子。

运行 Export-BitLockerKeys PowerShell 脚本

从 Active Directory 中的所有计算机导出 BitLocker 恢复密钥。

C:scripts.Export-BitlockerKeys.ps1 -OutputPath "C:tempAllComputers.csv"

从 Active Directory 中特定 OU(组织单位)内的所有计算机导出 BitLocker 恢复密钥。

C:scripts.Export-BitlockerKeys.ps1 -OutputPath "C:tempComputersOU.csv" -OU "OU=WIN10,OU=Computers,OU=Company,DC=exoip,DC=local"

打开路径中的 CSV 文件C:温度与您最喜欢的应用程序。例如,使用 Microsoft Excel。

就是这样!

结论

您了解了如何使用 PowerShell 将 BitLocker 恢复密钥从 Active Directory 导出到 CSV 文件。建议的方法是浏览 Active Directory 并检索 BitLocker 恢复密钥。这样,所有内容都保留在 AD 中,并且不会进行导出。但是,如果您需要获取包含所有 BitLocker 恢复密码的列表,并且确保在成功登录后重置恢复密码,那么这是最好的方法。

您喜欢这篇文章吗?您可能还喜欢如何创建 Active Directory 安全评估报告。不要忘记关注我们并分享这篇文章。