src/New-AlertRule.ps1

function New-AlertRule {
    [CmdletBinding()]
    [OutputType([PSCustomObject[]])]
    Param(
        [string][Parameter(Mandatory)]$ResourceType,
        [string][Parameter(Mandatory)]$Name,
        [ValidateSet("Critical", "Error", "Warning", "Information")]
        [string][Parameter(Mandatory)]$Severity,
        [ScriptBlock][Parameter(Mandatory)]$Criteria,
        [string][Parameter()]$Description = "",
        [string[]][Parameter()]$AlertValidationSteps = @(),
        [string[]][Parameter()]$AlertFixSteps = @(),
        [timespan][Parameter()]$WindowSize,
        [timespan][Parameter()]$Frequency,
        [PsCustomObject[]][Parameter(ValueFromPipeline)]$InputObject
    )

    PROCESS {
        foreach ($original in $InputObject) {
            return $original
        }
    }
    END {
        [PSCustomObject]@{
            ResourceType         = $ResourceType
            Name                 = $Name
            Description          = $Description
            AlertValidationSteps = $AlertValidationSteps
            AlertFixSteps        = $AlertFixSteps
            Criteria             = $Criteria
            Severity             = $Severity
            WindowSize           = if ($WindowSize) { $WindowSize } else { New-TimeSpan -Minutes 5 }
            Frequency            = if ($Frequency) { $Frequency } else { New-TimeSpan -Minutes 5 }
        }
    }
}