Cmdlets/Public/Get-NbaStandings.ps1

function Get-NbaStandings {
    [CmdletBinding()]
    param (
        # Standings Type
        [Parameter(Mandatory = $false)]
        [ValidateSet("All", "Conference", "Division")]
        [string]
        $Type = "All",

        # Date
        [Parameter(Mandatory = $false)]
        [Obsolete('-Date is not currently supported. Current Standings will be returned instead.')]
        [datetime]
        $Date,

        # Returns the raw JSON response
        [Parameter(Mandatory = $false)]
        [switch]
        $Raw
    )
    
    begin {
        
    }
    
    process {
        [string] $Endpoint = $Script:Config.Endpoints.Standings.Replace("{type}", $Type.ToLower())
        $Response = Invoke-NbaRequest -Uri $Endpoint -Method:Get

        if ($PSBoundParameters['Raw']) {
            $Response
        }
        else {
            switch ($Type) {
                "All" {  
                    foreach ($TeamEntry in $Response.league.standard.Teams) {
                        [NbaStandingEntry]::new($TeamEntry, $Type)
                    }
                    break
                }
                "Conference" {
                    $ConferenceObjects = $Response.league.standard.conference
                    $ConferenceNames = $ConferenceObjects.PSObject.Properties.Where( { $_.MemberType -eq "NoteProperty" }).Name
                    foreach ($Conference in $ConferenceNames) {
                        foreach ($TeamEntry in $ConferenceObjects.$($Conference)) {
                            [NbaStandingEntry]::new($TeamEntry, $Type)
                        }
                    }
                    break
                }
                "Division" {
                    $ConferenceObjects = $Response.league.standard.conference
                    $ConferenceNames = $ConferenceObjects.PSObject.Properties.Where( { $_.MemberType -eq "NoteProperty" }).Name
                    foreach ($Conference in $ConferenceNames) {
                        $DivisionObjects = $ConferenceObjects.$($Conference)
                        $DivisionNames = $DivisionObjects.PSObject.Properties.Where( { $_.MemberType -eq "NoteProperty" }).Name
                        foreach ($Division in $DivisionNames) {
                            foreach ($TeamEntry in $DivisionObjects.$($Division)) {
                                [NbaStandingEntry]::new($TeamEntry, $Type)
                            }
                        }
                    }
                    break
                }
                Default {
                    $Response
                    break
                }
            }
        }
    }
    
    end {
        
    }
}