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)'" } } |