Private/HashFunctions/Get-JCHash.ps1

Function Get-JCHash() {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    Param(
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)][ValidateNotNullOrEmpty()][string]$Url,
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 1)][ValidateNotNullOrEmpty()][string]$Method,
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 2)][ValidateNotNullOrEmpty()][string]$Key,
        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, Position = 3)][ValidateNotNullOrEmpty()][array]$Values = @(),
        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, Position = 4)][ValidateNotNullOrEmpty()][string]$Body = '',
        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, Position = 5)][ValidateNotNullOrEmpty()][int]$Limit = 100,
        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, Position = 6)][ValidateNotNullOrEmpty()][int]$Skip = 0
    )
    Begin {
        Write-Verbose ('Parameter Set: ' + $PSCmdlet.ParameterSetName)
    }
    Process {
        # Add key to values
        If ($Values) { $Values += $Key }
        $DataSet = Invoke-JCApi -Url:($Url) -Method:($Method) -Fields:($Values) -Body:($Body) -Paginate:($true) -Limit:($Limit) -Skip:($Skip)
        #Convert $DataSet from Object to Hashtable with Object data as Values to make searchable
        $Hashtable = New-Object System.Collections.Hashtable
        ForEach ($Item In $DataSet) {
            $Hashtable.Add($Item.$Key, $Item)
        }
    }
    End {
        Return $Hashtable
    }
}