functions/Export-CertificateReport.ps1

function Export-CertificateReport {
    <#
    .SYNOPSIS
        Exports a list as csv and xml file with the expiring certificates and exports the associated public certificates as cer file.
 
    .DESCRIPTION
        Exports a list as csv and xml file with the expiring certificates and exports the associated public certificates as cer file.
 
    .PARAMETER ExpiringCertificates
        A list containing all certificates to be examined
 
    .PARAMETER Path
        Specifies the path to export
 
    .EXAMPLE
        PS C:\> $expiringCertificates | Export-CertificateReport -Path C:\Temp
 
        Exports the following files to "C:\Temp"
            "expiring_certificates_<date>.csv"
            "expiring_certificates_<date>.xml"
            "<thumbprint.cer"
#>

    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        $ExpiringCertificates,

        [string]
        $Path
    )

    begin {
        $selectProperties = @(
            "IssuedRequestID"
            "Certificate.SerialNumber As SN"
            "RequesterName"
            "Certificate.Subject As Subject"
            "TemplateDisplayName"
            "CertificateExpirationDate"
            "Certificate.Thumbprint As Thumbprint"
            "Certificate.DnsNameList As DnsNameList"
        )
        $allCerts = @()

        $exportFolder = Resolve-PSFPath -Path $Path -SingleItem -Provider FileSystem
        $csvPath = Join-Path -Path $exportFolder -ChildPath "expiring_certificates_$(Get-Date -Format yyyy-MM-dd).csv"
        $xmlPath = Join-Path -Path $exportFolder -ChildPath "expiring_certificates_$(Get-Date -Format yyyy-MM-dd).xml"
    }
    process {
        $ExpiringCertificates | Select-PSFObject $selectProperties | Export-Csv -Path $csvPath -Append
        foreach ($certificate in $ExpiringCertificates) {
            $cerPath = Join-Path -Path $exportFolder -ChildPath "$($certificate.certificate.thumbprint).cer"
            $cerData = $certificate.certificate.Getrawcertdata()
            [System.IO.File]::WriteAllBytes($cerPath, $cerData)
            $allCerts += $certificate
        }
    }
    end {
        $allCerts | Export-PSFClixml -Path $xmlPath -Depth 5
    }
}