Cmdlets/Public/Get-NbaTeam.ps1

function Get-NbaTeam {
    [CmdletBinding()]
    param (
        # Team ID
        [Parameter(
            Mandatory = $true, 
            ValueFromPipelineByPropertyName = $true,
            ParameterSetName = "TeamId"
        )]
        [string]
        $TeamId,

        # Team Name
        [Parameter(
            Mandatory = $true,
            ParameterSetName = "TeamName"
        )]
        [string]
        $Name,

        # Type
        [Parameter(
            Mandatory = $true,
            ParameterSetName = "Type"
        )]
        [ValidateSet("Nba", "AllStar", "International")]
        [string]
        $Type,

        # Year
        [Parameter(
            Mandatory = $false, 
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateRange(0, 9999)]
        [Alias("Season")]
        [int]
        $Year
    )
    
    begin {
        if (-Not($Year)) {
            $Year = $Script:Config.Season.Year
        }
        [string] $endpoint = $Script:Config.Endpoints.Teams.Replace("{year}", $Year.ToString("0000"))
        $Response = Invoke-NbaRequest -Uri $endpoint -Method:Get
        $TeamList = $response.league.standard
    }
    
    process {
        if ($PSCmdlet.ParameterSetName -eq 'TeamId') {
            $Teams = $TeamList.Where( { $_.teamId -eq $TeamId })
        }
        elseif ($PSCmdlet.ParameterSetName -eq 'TeamName') {
            $Teams = $TeamList.Where( { $_.fullName -like $Name })
        }
        elseif ($PSCmdlet.ParameterSetName -eq 'Type') {
            switch ($Type) {
                "Nba" { $Teams = $TeamList.Where( { $_.isNbaFranchise }); break; }
                "AllStar" { $Teams = $TeamList.Where( { $_.isAllStar }); break; }
                "International" { $Teams = $TeamList.Where( { $_.confName -eq "Intl" }); break; }
                Default { break; }
            }
        }

        foreach ($Team in $Teams) {
            [NbaTeam]::new($Team, $Year)
        }
    }
    
    end {
        
    }
}