Public/Get-ALHADBitlockerRecoveryKey.ps1

<#PSScriptInfo
 
.VERSION 1.0.1
 
.GUID 759f9aaf-e0c8-4a27-bf43-72acf1dca5db
 
.AUTHOR Dieter Koch
 
.COMPANYNAME
 
.COPYRIGHT (c) 2021-2023 Dieter Koch
 
.TAGS Bitlocker, AD, Active Directory
 
.LICENSEURI https://github.com/admins-little-helper/ALH/blob/main/LICENSE
 
.PROJECTURI https://github.com/admins-little-helper/ALH
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
    1.0.0
    Initial release.
 
    1.0.1
    Fixed issue in returning computer name.
 
#>



<#
 
.DESCRIPTION
Contains a function to retrieve the Bitlocker recovery key for a computer account stored in Active Directory.
This functions is a proxy function for the 'Get-ADComputer' cmdlet.
 
.LINK
https://github.com/admins-little-helper/ALH
 
#>



function Get-ALHADBitlockerRecoveryKey {
    <#
    .SYNOPSIS
        Retrieves the Bitlocker recovery key for a computer account stored in Active Directory.
 
    .DESCRIPTION
        Queries the Bitlocker recovery key for a computer account stored in Active Directory.
        This functions is a proxy function for the 'Get-ADComputer' cmdlet. It supports the same parameters as the
        'Get-ADComputer' cmdlet. For more information check out the help for that cmdlet.
 
    .EXAMPLE
        Get-ALHADBitlockerRecoveryKey -Identity MyComputer
 
    .EXAMPLE
        Get-ALHADBitlockerRecoveryKey -Identity MyComputer1, MyComputer2
 
    .EXAMPLE
        MyComputer1, MyComputer2 | Get-ALHADBitlockerRecoveryKey
 
    .INPUTS
        System.String
 
    .OUTPUTS
        PSCustomObject
 
    .NOTES
        Author: Dieter Koch
        Email: diko@admins-little-helper.de
 
    .LINK
        https://github.com/admins-little-helper/ALH/blob/main/Help/Get-ALHADBitlockerRecoveryKey.txt
    #>


    [CmdletBinding(DefaultParameterSetName = 'Filter')]
    param()

    dynamicparam {
        try {
            $targetCmd = $ExecutionContext.InvokeCommand.GetCommand('ActiveDirectory\Get-ADComputer', [System.Management.Automation.CommandTypes]::Cmdlet, $PSBoundParameters)
            $dynamicParams = @($targetCmd.Parameters.GetEnumerator() | Microsoft.PowerShell.Core\Where-Object { $_.Value.IsDynamic })
            if ($dynamicParams.Length -gt 0) {
                $paramDictionary = [Management.Automation.RuntimeDefinedParameterDictionary]::new()
                foreach ($param in $dynamicParams) {
                    $param = $param.Value

                    if (-not $MyInvocation.MyCommand.Parameters.ContainsKey($param.Name)) {
                        $dynParam = [Management.Automation.RuntimeDefinedParameter]::new($param.Name, $param.ParameterType, $param.Attributes)
                        $paramDictionary.Add($param.Name, $dynParam)
                    }
                }

                return $paramDictionary
            }
        }
        catch {
            throw
        }
    }

    begin {
        try {
            $outBuffer = $null
            if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
                $PSBoundParameters['OutBuffer'] = 1
            }

            $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('ActiveDirectory\Get-ADComputer', [System.Management.Automation.CommandTypes]::Cmdlet)
            $scriptCmd = { & $wrappedCmd @PSBoundParameters | ForEach-Object {
                    $BitlockerInfo = Get-ADObject -Filter { objectclass -eq 'msFVE-RecoveryInformation' } -SearchBase $_.DistinguishedName -Properties 'msFVE-RecoveryPassword'

                    if ($null -ne $BitlockerInfo) {
                        foreach ($BitlockerRecoveryKey in $BitlockerInfo) {
                            $ComputerInfo = [ordered]@{}
                            $ComputerInfo.Name = $_.Name
                            $ComputerInfo.PasswordID = ($BitlockerRecoveryKey.Name -split "{")[1] -replace "}", ""
                            $ComputerInfo.PasswordDate = Get-Date (($BitlockerRecoveryKey.Name -split "{")[0])
                            $ComputerInfo.RecoveryPassword = $BitlockerRecoveryKey.'msFVE-RecoveryPassword'

                            foreach ($Parameter in $PSBoundParameters.Properties) {
                                $ComputerInfo.$Parameter = $_.$Parameter
                            }

                            $ComputerInfoObj = New-Object -TypeName PSObject -Property $ComputerInfo
                            $ComputerInfoObj
                        }
                    }
                    else {
                        Write-Verbose -Message "No Bitlocker information found for computer '$($_.Name)'"
                    }
                }
            }

            $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
            $steppablePipeline.Begin($PSCmdlet)
        }
        catch {
            throw
        }
    }

    process {
        try {
            $steppablePipeline.Process($_)
        }
        catch {
            throw
        }
    }

    end {
        try {
            $steppablePipeline.End()
        }
        catch {
            throw
        }
    }

    <#
    #.ForwardHelpTargetName ActiveDirectory\Get-ADComputer
    #.ForwardHelpCategory Cmdlet
    #>


}


#region EndOfScript
<#
################################################################################
################################################################################
#
# ______ _ __ _____ _ _
# | ____| | | / _| / ____| (_) | |
# | |__ _ __ __| | ___ | |_ | (___ ___ _ __ _ _ __ | |_
# | __| | '_ \ / _` | / _ \| _| \___ \ / __| '__| | '_ \| __|
# | |____| | | | (_| | | (_) | | ____) | (__| | | | |_) | |_
# |______|_| |_|\__,_| \___/|_| |_____/ \___|_| |_| .__/ \__|
# | |
# |_|
################################################################################
################################################################################
# created with help of http://patorjk.com/software/taag/
#>

#endregion