Public/Get-SnipeitConsumable.ps1

<#
.SYNOPSIS
Gets a list of Snipe-it consumables

.PARAMETER search
A text string to search the consumables

.PARAMETER id
A id of specific consumable

.PARAMETER company_id
Id number of company

.PARAMETER category_id
Id number of category

.PARAMETER manufacturer_id
Id number of manufacturer

.PARAMETER sort
Sort results by column

.PARAMETER order
Specify the order (asc or desc) you wish to order by on your sort column

.PARAMETER expand
Whether to include detailed information on categories, etc (true) or just the text name (false)

.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all

.PARAMETER offset
Offset to use

.PARAMETER all
A return all results

.PARAMETER url
URL of Snipeit system,can be set using Set-SnipeitInfo command

.PARAMETER apiKey
Users API Key for Snipeit, can be set using Set-SnipeitInfo command

.EXAMPLE
Get-SnipeitConsumable -all
Returns all consumables

.EXAMPLE
Get-SnipeitConsumable -search paper
Returns search results containeing string display

.EXAMPLE
Get-Snipeitconsumable -id
Returns specific consumable

#>

function Get-SnipeitConsumable() {
    [CmdletBinding(DefaultParameterSetName = 'Search')]
    Param(
        [parameter(ParameterSetName='Search')]
        [string]$search,

        [parameter(ParameterSetName='Get with ID')]
        [int[]]$id,

        [parameter(ParameterSetName='Search')]
        [int]$category_id,

        [parameter(ParameterSetName='Search')]
        [int]$company_id,

        [parameter(ParameterSetName='Search')]
        [int]$manufacturer_id,

        [parameter(ParameterSetName='Search')]
        [int]$location_id,

        [parameter(ParameterSetName='Search')]
        [ValidateSet("asc", "desc")]
        [string]$order = "desc",

        [parameter(ParameterSetName='Search')]
        [ValidateSet('id', 'name', 'min_amt', 'order_number', 'serial', 'purchase_date', 'purchase_cost', 'company', 'category', 'qty', 'location', 'image', 'created_at')]
        [string]$sort = "created_at",


        [Parameter(ParameterSetName='Search')]
        [switch]$expand,

        [parameter(ParameterSetName='Search')]
        [int]$limit = 50,

        [parameter(ParameterSetName='Search')]
        [int]$offset,

        [parameter(ParameterSetName='Search')]
        [switch]$all = $false,

        [parameter(mandatory = $true)]
        [string]$url,

        [parameter(mandatory = $true)]
        [string]$apiKey
    )
    begin {

        $SearchParameter = . Get-ParameterValue -Parameters $MyInvocation.MyCommand.Parameters -BoundParameters $PSBoundParameters
    }

    process {
        switch ($PSCmdlet.ParameterSetName) {
            'Search' {
                $Parameters = @{
                    Uri           = "$url/api/v1/consumables"
                    Method        = 'Get'
                    Token         = $apiKey
                    GetParameters = $SearchParameter
                }

                if ($all) {
                    $offstart = $(if($offset){$offset} Else {0})
                    $callargs = $SearchParameter
                    $callargs.Remove('all')

                    while ($true) {
                        $callargs['offset'] = $offstart
                        $callargs['limit'] = $limit
                        $res=Get-Snipeitconsumable @callargs
                        $res
                        if ($res.count -ne $limit) {
                            break
                        }
                        $offstart = $offstart + $limit
                    }
                } else {
                    $result = Invoke-SnipeitMethod @Parameters
                    $result
                }
            }

            'Get with ID' {
                foreach($consumable_id in $id) {
                    $Parameters = @{
                        Uri           =  "$url/api/v1/consumables/$consumable_id"
                        Method        = 'Get'
                        Token         = $apiKey
                        GetParameters = $SearchParameter
                    }
                    $result = Invoke-SnipeitMethod @Parameters
                    $result
                }
            }
        }
    }
}