Public/Read-NSPOptional.ps1
|
function Read-NSPOptional { <# .SYNOPSIS Reads a value that may be blank (skip or default) - a single prompt with no retry loop. .DESCRIPTION The back-aware equivalent of a bare Read-Host. -AllowBack lets a literal B or Back return the back signal (see Test-NSPBackSignal). Blank returns -Default (an empty string when no default is given). -Answer supports noninteractive callers and tests. .EXAMPLE $filter = Read-NSPOptional -Prompt 'Name filter (blank for all)' .EXAMPLE $port = Read-NSPOptional -Prompt 'Port' -Default '1812' -AllowBack #> [CmdletBinding()] [OutputType([string])] param( [Parameter(Mandatory)][string]$Prompt, [AllowEmptyString()][string]$Default = '', [switch]$AllowBack, [AllowEmptyString()][string]$Answer ) $hint = if ($Default) { " (blank for '$Default')" } else { '' } $backHint = if ($AllowBack) { ' [B = back]' } else { '' } $response = if ($PSBoundParameters.ContainsKey('Answer')) { $Answer } else { Read-Host ($Prompt + $hint + $backHint) } if ($AllowBack -and $response -match '^(?i)b(ack)?$') { return $script:NSPBackSignal } if ([string]::IsNullOrWhiteSpace($response)) { return $Default } return $response.Trim() } |