public/Get-CACertificate.ps1

function Get-CACertificate
{
    <#
    .SYNOPSIS
        Get certificate/request from certificate authority.
    .DESCRIPTION
        Return list of certificates/requests.
    .PARAMETER State
        State of certificate/request (revoked, expired, denied, failed).
    .PARAMETER Date
        Date to get certificate up-to. Default is today.
    .EXAMPLE
        Get-CACertificate -State 'Revoked';
    .EXAMPLE
        Get-CACertificate -State 'Revoked' -Date (Get-Date).AddDays(-30);
 
    #>

    [cmdletbinding()]
    [OutputType([System.Collections.ArrayList])]
    param
    (
        # State of certificate/request (revoked, expired, denied, failed).
        [Parameter(Mandatory = $false)]
        [ValidateSet('Revoked', 'Expired', 'Denied', 'Failed')]
        [string]$State,

        # Date to get certificate up-to. Default is today.
        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
        [ValidateScript({ $_ -le (Get-Date) })]
        [DateTime]$Date = (Get-Date)
    )

    BEGIN
    {
        # Write to log.
        $customProgress = Write-CustomProgress -Activity $MyInvocation.MyCommand.Name -CurrentOperation 'Getting certificates/requests from certificate authority';

        # Object array for the result.
        $result = New-Object System.Collections.ArrayList;
    }
    PROCESS
    {
        # If date is set.
        if ($PSBoundParameters.ContainsKey('Date'))
        {
            # If state is revoked.
            if ($State -eq 'Revoked')
            {
                # Get revoked certificates.
                $result = Get-CACertificateRevoked -Date $Date;
            }
            # If state is expired.
            elseif ($State -eq 'Expired')
            {
                # Get expired certificates.
                $result = Get-CACertificateExpired -Date $Date;
            }
            # If state is denied.
            elseif ($State -eq 'Denied')
            {
                # Get denied requests.
                $result = Get-CACertificateRequestDenied -Date $Date;
            }
            # If state is failed.
            elseif ($State -eq 'Failed')
            {
                # Get failed requests.
                $result = Get-CACertificateRequestFailed -Date $Date;
            }
            # Else use default.
            else
            {
                # Get certificates.
                $result += [PSCustomObject]@{
                    Revoked = Get-CACertificateRevoked -Date $Date;
                    Expired = Get-CACertificateExpired -Date $Date;
                    Denied = Get-CACertificateRequestDenied -Date $Date;
                    Failed = Get-CACertificateRequestFailed -Date $Date;
                };
            }
        }
        # Else use default.
        else
        {
            # If state is revoked.
            if ($State -eq 'Revoked')
            {
                # Get revoked certificates.
                $result = Get-CACertificateRevoked;
            }
            # If state is expired.
            elseif ($State -eq 'Expired')
            {
                # Get expired certificates.
                $result = Get-CACertificateExpired;
            }
            # If state is denied.
            elseif ($State -eq 'Denied')
            {
                # Get denied requests.
                $result = Get-CACertificateRequestDenied;
            }
            # If state is failed.
            elseif ($State -eq 'Failed')
            {
                # Get failed requests.
                $result = Get-CACertificateRequestFailed;
            }
            # Else use default.
            else
            {
                # Get certificates.
                $result += [PSCustomObject]@{
                    Revoked = Get-CACertificateRevoked;
                    Expired = Get-CACertificateExpired;
                    Denied = Get-CACertificateRequestDenied;
                    Failed = Get-CACertificateRequestFailed;
                };
            }
        }
    }
    END
    {
        # Write to log.
        Write-CustomProgress @customProgress;

        # Return the result.
        return $result;
    }
}