public/Get-RootCertificates.ps1

function Get-RootCertificates {
    <#
    .SYNOPSIS
        Gets information about root certificates in the specified directory.

    .DESCRIPTION
        This function retrieves details about root certificates, including their subject, issuer, and expiration dates.

    .PARAMETER CertPath
        The path to the directory containing the certificate files (default: /etc/ssl/certs).

    .PARAMETER Detailed
        Whether to include detailed information about each certificate.
    .EXAMPLE
        Get-RootCertificates | Select-Object CommonName, ExpiryDate, DaysUntilExpiry
        This example retrieves root certificates and selects specific properties for display.
    .EXAMPLE
        Get-RootCertificates -Detailed | Where-Object { $_.DaysUntilExpiry -lt 365 }
        This example retrieves detailed information about root certificates that are expiring within the next year.
    .EXAMPLE
        Get-RootCertificates | Where-Object IsExpired | Select-Object CommonName, ExpiryDate
        This example retrieves root certificates that have already expired and selects their common names and expiration dates.
    .LINK
        https://github.com/Skatterbrainz/linuxtools/blob/master/docs/Get-RootCertificates.md
    #>

    [CmdletBinding()]
    param(
        [string]$CertPath = "/etc/ssl/certs",
        [switch]$Detailed
    )
    $results = @(Get-Certificates -CertPath $CertPath -CertFilter '*.pem' -Detailed:$Detailed -Quiet |
        ForEach-Object {
            [pscustomobject]@{
                FileName          = if ($_.Path) { Split-Path -Path $_.Path -Leaf } else { $null }
                CommonName        = $_.CommonName
                Subject           = $_.Subject
                Issuer            = $_.Issuer
                StartDate         = $_.StartDate
                EndDate           = $_.ExpiryDate
                ExpiryDate        = $_.ExpiryDate
                DaysUntilExpiry   = $_.DaysUntilExpiry
                SerialNumber      = $_.SerialNumber
                SHA256Fingerprint = $_.Fingerprint
                IsExpired         = $_.IsExpired
                SignatureAlgorithm = $_.SignatureAlgorithm
                PublicKeyAlgorithm = $_.PublicKeyAlgorithm
                KeySize           = $_.KeySize
            }
        })
    Write-Host "`nRoot Certificate Summary:" -ForegroundColor Green
    Write-Host "Total certificates: $($results.Count)" -ForegroundColor Cyan
    Write-Host "Expired certificates: $($results | Where-Object IsExpired | Measure-Object | Select-Object -ExpandProperty Count)" -ForegroundColor Red
    Write-Host "Expiring within 30 days: $($results | Where-Object { $_.DaysUntilExpiry -lt 30 -and -not $_.IsExpired } | Measure-Object | Select-Object -ExpandProperty Count)" -ForegroundColor Yellow
    $results | Sort-Object CommonName
}

# Usage examples:
# Get-RootCertificates | Select-Object CommonName, ExpiryDate, DaysUntilExpiry | Format-Table
# Get-RootCertificates -Detailed | Where-Object { $_.DaysUntilExpiry -lt 365 } | Format-Table
# Get-RootCertificates | Where-Object IsExpired | Select-Object CommonName, ExpiryDate