functions/Get-AzSMExpiringWebAppCertificates.ps1

function global:Get-AzSMExpiringWebAppCertificates {

    <#
        .SYNOPSIS
        List App Service certificates that expire within 31 days or are already expired in a subscription.
        .DESCRIPTION
        List App Service certificates that expire within 31 days or are already expired in a subscription.
        A ResourceGroupName property is added to each certificate so the output has the values needed by Remove-AzWebAppCertificate.
        .PARAMETER SubscriptionID
        Azure subscription ID in the format, 00000000-0000-0000-0000-000000000000
        .PARAMETER ResourceGroupName
        A single Azure resource group name to scope query to
        .PARAMETER Days
          Set to the number of days ahead to check for expiring certificates.
          Default is 31 days.
        .OUTPUTS
        Microsoft.Azure.Commands.WebApps.Models.WebApp.PSCertificate
        .EXAMPLE
        Get-AzSMExpiringWebAppCertificates -SubscriptionID 00000000-0000-0000-0000-000000000000
        Get a list of App Service certificates that expire within 31 days or are already expired in a subscription.
        .EXAMPLE
        Get-AzSMExpiringWebAppCertificates -SubscriptionID 00000000-0000-0000-0000-000000000000|ForEach-Object {Remove-AzWebAppCertificate -ResourceGroupName $_.ResourceGroupName -ThumbPrint $_.Thumbprint}
        Remove App Service certificates that expire within 31 days or are already expired in a subscription without confirmation.
        .NOTES
        * CANNOT be piped directly to Remove-AzWebAppCertificate, its parameters do not accept pipeline input. Use ForEach-Object with the ResourceGroupName and Thumbprint properties.
        * Remove-AzWebAppCertificate does not prompt for confirmation.
        .LINK
    #>


    [CmdletBinding(
        DefaultParameterSetName='SubscriptionID',
        ConfirmImpact='Low'
    )]

    param(
      [Parameter(Mandatory=$true)][string] $SubscriptionID,
      [Parameter(Mandatory=$false)][string] $ResourceGroupName,
      [int] $Days = 31
    )

    $null = Set-AzContext -SubscriptionId $SubscriptionID
    Write-Debug ('Subscription ID: {0}' -f $SubscriptionID)

    if ($ResourceGroupName.Length -gt 0) {
      $certs=Get-AzWebAppCertificate -ResourceGroupName $ResourceGroupName
    } else {
      $certs=Get-AzWebAppCertificate
    }

    $expiringCerts=$certs|Where-Object{$null -ne $_.ExpirationDate -and $_.ExpirationDate -lt (Get-Date).AddDays($Days)}

    #Certificate objects do not include a resource group, add it from the resource Id for Remove-AzWebAppCertificate.
    $expiringCerts|ForEach-Object {
      $_|Add-Member -MemberType NoteProperty -Name ResourceGroupName -Value ($_.Id -split '/')[4] -Force
    }

    Return $expiringCerts
}
Export-ModuleMember -Function Get-AzSMExpiringWebAppCertificates