internal/functions/Confirm-ValidPolicyResourceName.ps1

function Confirm-ValidPolicyResourceName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        $Name
    )

    $invalidCharacters = @('%', '&', '\', '?', '/', '<', '>', ':', '#', '*', '+')
    foreach ($character in $Name.ToCharArray()) {
        if ($character -in $invalidCharacters -or [char]::IsControl($character)) {
            return $false
        }
    }

    return -not $Name.EndsWith(" ")
}

function Assert-ValidPolicyResourceName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string] $Name,

        [Parameter(Mandatory = $true)]
        [string] $ResourceType
    )

    if (-not (Confirm-ValidPolicyResourceName -Name $Name)) {
        Write-Error "$ResourceType name '$Name' contains invalid characters '%, &, \, ?, /, <, >, :, #, *, +' or control characters, or ends with a space." -ErrorAction Stop
    }
}