public/Get-PulpLocalConfig.ps1

# .ExternalHelp powershell-pulp-help.xml
Function Get-PulpLocalConfig {
  [Cmdletbinding()]
  Param(
    [Parameter(Mandatory=$false)] [string]$File = '~\.pulp\admin.json',
    [Parameter(Mandatory=$false)] [switch]$Server,
    [Parameter(Mandatory=$false)] [switch]$Port,
    [Parameter(Mandatory=$false)] [switch]$Protocol,
    [Parameter(Mandatory=$false)] [switch]$Username,
    [Parameter(Mandatory=$false)] [switch]$Password,
    [Parameter(Mandatory=$false)] [switch]$AuthenticationMethod
  )
  $defaults = @{'port'='443';'protocol'='https';'username'=$env:USERNAME;'authenticationmethod'='certificate'}
  $settings = New-Object -TypeName PSCustomObject
  $readSettings = New-Object -TypeName PSCustomObject
  $params = $PSBoundParameters.GetEnumerator()|
            Where-Object {($_.Key -ne 'File')}
  if (Test-Path $File){
    try {
      $readSettings = Get-Content -Raw '~\.pulp\admin.json' | ConvertFrom-Json
    } catch {}
  }
  foreach ($parameter in $params){
    $setting = $parameter.Key.ToLower()
    $value = $parameter.Value
    if ($value){
      if ($readSettings.$setting) {
        Add-Member -InputObject $settings -MemberType NoteProperty `
                   -Name $setting -Value $readSettings.$setting
      }
      elseif ($defaults.$setting) {
        Add-Member -InputObject $settings -MemberType NoteProperty `
                   -Name $setting -Value $defaults.$setting}
      else {
        If ($setting -eq 'Password') {
          $credential = Get-Credential -user ((Get-PulpLocalConfig -Username).Username) -Message "Enter Pulp password (username not used here)"
          Add-Member -InputObject $settings -MemberType NoteProperty `
                     -Name $setting -Value ($credential.Password | ConvertFrom-SecureString)
        }
        Else {
          Add-Member -InputObject $settings -MemberType NoteProperty `
                     -Name $setting -Value (Read-Host "$setting")
        }
      }
    }
  }
  if ($params.count -eq 0){
    foreach ($default in $defaults.GetEnumerator()){
      $setting = $default.Name
      $value = $default.Value
      Add-Member -InputObject $settings -MemberType NoteProperty `
                 -Name $setting -Value $value -Force
    }
    $readSettings.PSObject.Properties |
    foreach-object {
      $setting = $_.Name
      $value = $_.Value
      Add-Member -InputObject $settings -MemberType NoteProperty `
                 -Name $setting -Value $value -Force
    }
  }
  Return $settings
}