Private/Get-PstApprovedVerb.ps1

function Get-PstApprovedVerb {
    <#
    .SYNOPSIS
        Validates and retrieves approved PowerShell verbs.

    .DESCRIPTION
        Checks if a verb is an approved PowerShell verb. Can either validate
        a specific verb or return all approved verbs.

    .PARAMETER Verb
        The verb to validate.

    .PARAMETER ListAll
        Return all approved PowerShell verbs.

    .EXAMPLE
        Get-PstApprovedVerb -Verb "Get"
        Returns $true if "Get" is approved.

    .EXAMPLE
        Get-PstApprovedVerb -Verb "Fetch"
        Returns $false and suggests approved alternatives.

    .EXAMPLE
        Get-PstApprovedVerb -ListAll
        Returns array of all approved verbs.

    .NOTES
        Version: 1.0
        Author: numidia
        Creation Date: 2025-12-01
        Purpose: Validate PowerShell verb compliance
    #>

    [CmdletBinding(DefaultParameterSetName = 'Validate')]
    [OutputType([bool], ParameterSetName = 'Validate')]
    [OutputType([string[]], ParameterSetName = 'List')]
    param(
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'Validate')]
        [string]$Verb,

        [Parameter(Mandatory = $true, ParameterSetName = 'List')]
        [switch]$ListAll
    )

    begin {
        Write-Debug "Begin '$($MyInvocation.MyCommand.Name)' at '$(Get-Date)'"
    }

    process {
        try {
            if ($ListAll) {
                $approvedVerbs = Get-Verb | Select-Object -ExpandProperty Verb
                Write-Verbose "Retrieved $($approvedVerbs.Count) approved verbs"
                return $approvedVerbs
            }
            else {
                $approvedVerbs = Get-Verb
                $matchingVerb = $approvedVerbs | Where-Object { $_.Verb -eq $Verb }

                if ($matchingVerb) {
                    Write-Verbose "'$Verb' is an approved PowerShell verb (Group: $($matchingVerb.Group))"
                    return $true
                }
                else {
                    Write-Warning "'$Verb' is not an approved PowerShell verb"

                    # Try to suggest similar verbs
                    $similar = $approvedVerbs | Where-Object { $_.Verb -like "$($Verb.Substring(0, [Math]::Min(3, $Verb.Length)))*" }
                    if ($similar) {
                        $suggestions = ($similar | Select-Object -First 3 -ExpandProperty Verb) -join ', '
                        Write-Warning "Suggested alternatives: $suggestions"
                    }

                    return $false
                }
            }
        }
        catch {
            Write-Error "Failed to validate verb: $($_.Exception.Message)"
            $PSCmdlet.ThrowTerminatingError($_)
        }
    }

    end {
        Write-Debug "End '$($MyInvocation.MyCommand.Name)' at '$(Get-Date)'"
    }
}