Public/Get-PatStoredServer.ps1

function Get-PatStoredServer {
    <#
    .SYNOPSIS
        Gets stored Plex server configurations.
 
    .DESCRIPTION
        Retrieves Plex server configurations from the config file.
        Can retrieve all servers, the default server, or a specific server by name.
 
    .PARAMETER Name
        Optional name of a specific server to retrieve
 
    .PARAMETER Default
        If specified, returns only the default server
 
    .EXAMPLE
        Get-PatStoredServer
 
        Returns all stored servers.
 
    .EXAMPLE
        Get-PatStoredServer -Default
 
        Returns the default server.
 
    .EXAMPLE
        Get-PatStoredServer -Name "Main Server"
 
        Returns the server named "Main Server".
 
    .OUTPUTS
        PSCustomObject
        Returns server configuration objects with name, uri, and default properties
    #>

    [CmdletBinding(DefaultParameterSetName = 'All')]
    param (
        [Parameter(Mandatory = $false, ParameterSetName = 'ByName')]
        [ValidateNotNullOrEmpty()]
        [string]
        $Name,

        [Parameter(Mandatory = $false, ParameterSetName = 'Default')]
        [switch]
        $Default
    )

    try {
        $config = Get-PatServerConfig -ErrorAction Stop

        switch ($PSCmdlet.ParameterSetName) {
            'ByName' {
                $server = $config.servers | Where-Object { $_.name -eq $Name }
                if (-not $server) {
                    throw "No server found with name '$Name'"
                }
                $server
            }
            'Default' {
                $defaultServers = @($config.servers | Where-Object { $_.default -eq $true })
                if ($defaultServers.Count -eq 0) {
                    throw "No default server configured"
                }
                if ($defaultServers.Count -gt 1) {
                    Write-Warning "Multiple default servers found in configuration. Using first: $($defaultServers[0].name). Run Set-PatDefaultServer to fix."
                }
                $defaultServers[0]
            }
            'All' {
                # Return servers if any exist, otherwise return nothing (not $null)
                if ($config.servers) {
                    $config.servers
                }
            }
        }
    }
    catch {
        throw "Failed to get stored servers: $($_.Exception.Message)"
    }
}