Private/Resolve-NSPSslBindingSelection.ps1
|
function Resolve-NSPSslBindingSelection { # The binding numbers (1-based) an answer picks: blank = the proposed ones, A = every selectable # one, N = none, or a list like "1,3" or "2-4". Throws on a number out of range or one that can't # be rebound (already on the certificate, Central Certificate Store). [CmdletBinding()] [OutputType([int])] param( [AllowEmptyString()][string]$Answer, [Parameter(Mandatory)][int]$Count, [AllowEmptyCollection()][int[]]$Proposed = @(), [AllowEmptyCollection()][int[]]$Selectable = @() ) $text = "$Answer".Trim() if (-not $text) { return $Proposed } if ($text -match '^(?i)n(one)?$') { return } if ($text -match '^(?i)a(ll)?$') { return $Selectable } $picked = [Collections.Generic.List[int]]::new() foreach ($part in ($text -split '[,\s]+' | Where-Object { $_ })) { if ($part -match '^(\d+)-(\d+)$') { $range = [int]$Matches[1]..[int]$Matches[2] } elseif ($part -match '^\d+$') { $range = @([int]$part) } else { throw "'$part' isn't a binding number." } foreach ($number in $range) { if ($number -lt 1 -or $number -gt $Count) { throw "There's no binding $number." } if ($number -notin $Selectable) { throw "Binding $number can't be rebound (see its note)." } if (-not $picked.Contains($number)) { $picked.Add($number) } } } $picked } |