Example

    function Validate-Input{
        Param(
            [Parameter(Mandatory=$true)]
            [array]$allowedInput = @(),
            [bool]$CaseSensitive = $false,
            [string]$inputValue
        )
            if(!$CaseSensitive){
                $inputValue = [string]$inputValue.ToLower()
                for($i = 0; $i -lt $allowedInput.Count; $i++){
                    $allowedInput[$i] = [string]$allowedInput[$i].ToString().ToLower()
                }
            }
            foreach($validResponse in $allowedInput){
                if([string]::Equals($inputValue, $validResponse)){
                    return $true
                }
            }
            return $false
    }
    function Ask-User{
        Param(
            [Parameter(Mandatory=$true, HelpMessage="Sets the type of prompt sent to user. i.e. Y/N response question or a typed response.")]
            [ValidateSet('YesNo', 'CustomResponse')]
            $PromptType,
            [array]$ContinueCases = @('yes', 'y'),
            [array]$AbortCases = @('no', 'n'),
            $ConfigOptions = @{InvalidMessage = "Incorrect input entered!"; ContinueMessage=""; AbortMessage="User action aborted."},
            [Parameter(Mandatory=$false, HelpMessage='On YesNo prompt, return boolean value or return actual user input.')]
            [ValidateSet('Bool', 'UserInput')]
            $ReturnType = 'Bool',
            [string]$Prompt
        )
            Switch($PromptType){
                'YesNo' {
                    $validInputs = $ContinueCases + $AbortCases
                    $response = ""
                    $validatedResponse = $true
                    while(!(Validate-Input -allowedInput $validInputs -CaseSensitive:$false -inputValue $response)){
                        if(!$validatedResponse){
                            Write-Host "$($ConfigOptions['InvalidMessage'])" -ForegroundColor Red
                        }
                        $response = Read-Host -Prompt "$Prompt (y/n)"
                        if($validatedResponse) { $validatedResponse = $false }
                    }
                    if($ContinueCases -contains $response){
                        Write-Host "$($ConfigOptions['ContinueMessage'])"
                        if($ReturnType -eq 'Bool'){
                            return $true
                        }
                        elseif($ReturnType -eq 'UserInput'){
                            return $response
                       }
                    }
                    elseif($AbortCases -contains $response){
                        Write-Host "$($ConfigOptions['AbortMessage'])"
                        if($ReturnType -eq 'Bool'){
                            return $false
                        }
                        elseif($ReturnType -eq 'UserInput'){
                            return $response
                        }
 
                    }
 
                }
 
            }
 
    }