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
}
}
}
}
}