SecretManagement.BitLocker.Extension/private/Get-ADComputerBitLockerRecoveryPassword.ps1

function Get-ADComputerBitLockerRecoveryPassword {
    [CmdletBinding(DefaultParameterSetName='LastSet')]
    param(
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory= $true, ValueFromPipeline = $true)]
        [Object]$Name,

        [Parameter(Mandatory = $true ,ValueFromPipeline = $true, ParameterSetName='AllSet')]
        [Switch]$All,

        [Parameter(Mandatory = $false)]
        [String]$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain().Name
    )

    begin {
        $splat = @{
            'Server' = $Domain
        }
    }

    process {
        $objects = @()
        
        try {
            $Name = Get-ADComputer -Identity $Name @splat -ErrorAction Stop
        }
        catch {
            Write-Debug ("Cannot find computer with name '{0}'" -f $Name)
        }                

        foreach ($_computer in $Name) {
            $entries = Get-ADObject -Filter {objectclass -eq 'msFVE-RecoveryInformation'} -SearchBase $_computer.DistinguishedName -Properties 'msFVE-RecoveryPassword','whenCreated' @splat

            if ($PSCmdlet.ParameterSetName -eq 'LastSet') {
                $entries = $entries | Select-Object -Last 1
            }

            foreach ($_entry in $entries) {
                if ($null -ne $_entry) {
                    $hash = @{}

                    $passwordId = $_entry.name

                    $hash.Add('Name', $_computer.Name)
                    $hash.Add('DNSHostName', $_computer.DNSHostName)
                    $hash.Add('Domain', $_computer.DNSHostName.Replace(('{0}.' -f $_computer.Name.ToLower()),''))
                    $hash.Add('RecoveryPassword', $_entry.'msFVE-RecoveryPassword')
                    $hash.Add('Id', ($passwordId -split '{')[-1].replace('}',''))
                    $hash.Add('WhenCreated', $_entry.whenCreated)
                        
                    $objects += New-Object -TypeName PSCustomObject -Property $hash
                }
            }
        }
    }

    end {
        $objects
    }
}