Private/Config-Helpers/Request-ConfigurationValue.ps1
function Request-ConfigurationValue { param( [Parameter(Mandatory = $true)] [string] $configName, [Parameter(Mandatory = $true)] [object] $configValue, [Parameter(Mandatory = $false)] [System.Boolean] $withRetries = $true, [Parameter(Mandatory = $false)] [System.Boolean] $treatEmptyDefaultAsValid = $false ) #if the file has a script - execute it: if ($null -ne $configValue.AllowedValues -and $configValue.AllowedValues.Type -eq "PSScript") { Write-InformationColored $configValue.AllowedValues.Description -ForegroundColor Yellow -InformationAction Continue $script = [System.Management.Automation.ScriptBlock]::Create($configValue.AllowedValues.Script) $configValue.AllowedValues.Values = Invoke-Command -ScriptBlock $script } $allowedValues = $configValue.AllowedValues.Values $hasAllowedValues = $null -ne $configValue.AllowedValues -and $null -ne $configValue.AllowedValues.Values -and $configValue.AllowedValues.Values.Length -gt 0 $defaultValue = $configValue.DefaultValue $hasDefaultValue = $null -ne $configValue.DefaultValue $hasValidator = $null -ne $configValue.Valid Write-InformationColored $configValue.Description -ForegroundColor White -InformationAction Continue if ($hasAllowedValues -and $configValue.AllowedValues.Display -eq $true) { Write-InformationColored "[allowed: $allowedValues] " -ForegroundColor Yellow -InformationAction Continue } do { Write-InformationColored "$($configName) " -ForegroundColor Yellow -NoNewline -InformationAction Continue if ($hasDefaultValue) { $displayDefaultValue = $defaultValue -eq "" ? "''" : $defaultValue if($configValue.Sensitive -and $defaultValue -ne "") { $displayDefaultValue = "<sensitive>" } Write-InformationColored "(default: ${displayDefaultValue}): " -ForegroundColor Yellow -NoNewline -InformationAction Continue } else { Write-InformationColored ": " -NoNewline -InformationAction Continue } if($configValue.Sensitive) { $readValue = Read-Host -MaskInput } else { $readValue = Read-Host } $previousValue = $configValue.Value if ($hasDefaultValue -and $readValue -eq "") { $configValue.Value = $configValue.defaultValue } else { $configValue.Value = $readValue } $hasNotSpecifiedValue = ($null -eq $configValue.Value -or "" -eq $configValue.Value) -and ($configValue.Value -ne $configValue.DefaultValue) $isDisallowedValue = $hasAllowedValues -and $allowedValues.Contains($configValue.Value) -eq $false $skipValidationForEmptyDefault = $treatEmptyDefaultAsValid -and $hasDefaultValue -and (($defaultValue -eq "" -and $configValue.Value -eq "") -or ($configValue.Value -eq "-")) # Reset the value to empty if we have a default and the user entered a dash (this is to handle cached situations and provide a method to clear a value) if($skipValidationForEmptyDefault -and $configValue.Value -eq "-") { $configValue.Value = "" } if($skipValidationForEmptyDefault) { $isNotValid = $false } else { $isNotValid = $hasValidator -and $configValue.Value -match $configValue.Valid -eq $false } if ($hasNotSpecifiedValue -or $isDisallowedValue -or $isNotValid) { Write-InformationColored "Please specify a valid value for this field." -ForegroundColor Red -InformationAction Continue $configValue.Value = $previousValue $validationError = $true } $shouldRetry = $validationError -and $withRetries } while ( ($hasNotSpecifiedValue -or $isDisallowedValue -or $isNotValid) -and $shouldRetry) Write-InformationColored "" -InformationAction Continue } |