Public/Get-SnipeitUser.ps1

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

.PARAMETER search
A text string to search the User data

.PARAMETER id
A id of specific User

.PARAMETER accessory_id
Get users a specific accessory id has been checked out to

.PARAMETER username
Optionally restrict User results to this username field

.PARAMETER email
Optionally restrict User results to this email field

.PARAMETER employee_num
Optionally restrict User results to this employee_num field

.PARAMETER state
Optionally restrict User results to this state field

.PARAMETER country
Optionally restrict User results to this country field

.PARAMETER zip
Optionally restrict User results to this zip field

.PARAMETER company_id
Optionally restrict User results to this company_id field

.PARAMETER location_id
Optionally restrict User results to this location_id field

.PARAMETER department_id
Optionally restrict User results to this department_id field

.PARAMETER deleted
Optionally restrict User results to deleted users only

.PARAMETER ldap_import
Optionally restrict User results to those with specified ldap_import value

.PARAMETER remote
Optionally restrict User results to those with specified remote worker value

.PARAMETER assets_count
Optionally restrict User results to those with the specified assets count

.PARAMETER licenses_count
Optionally restrict User results to those with the specified licenses count

.PARAMETER accessories_count
Optionally restrict User results to those with the specified accessories count

.PARAMETER consumables_count
Optionally restrict User results to those with the specified consumables count

.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, works with -offset and other parameters

.PARAMETER url
Deprecated parameter, please use Connect-SnipeitPS instead. URL of Snipeit system.

.PARAMETER apiKey
Deprecated parameter, please use Connect-SnipeitPS instead. Users API Key for Snipeit.

.EXAMPLE
Get-SnipeitUser -search SomeSurname

.EXAMPLE
Get-SnipeitUser -id 3

.EXAMPLE
Get-SnipeitUser -username someuser

.EXAMPLE
Get-SnipeitUser -email user@somedomain.com

.EXAMPLE
Get-SnipeitUser -accessory_id 3
Get users with accessory id 3 has been checked out to
#>


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

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

        [parameter(ParameterSetName='Get users a specific accessory id has been checked out to')]
        [string]$accessory_id,

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

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

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

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

        [parameter(ParameterSetName='Search')]
        [string]$username,

        [parameter(ParameterSetName='Search')]
        [string]$email,
        
        [parameter(ParameterSetName='Search')]
        [string]$employee_num,

        [parameter(ParameterSetName='Search')]
        [string]$state,
        
        [parameter(ParameterSetName='Search')]
        [string]$zip,
        
        [parameter(ParameterSetName='Search')]
        [string]$country,
        
        [parameter(ParameterSetName='Search')]
        [Nullable[bool]]$deleted,
        
        [parameter(ParameterSetName='Search')]
        [Nullable[bool]]$ldap_import,
        
        [parameter(ParameterSetName='Search')]
        [Nullable[bool]]$remote,
        
        [parameter(ParameterSetName='Search')]
        [int]$assets_count,
        
        [parameter(ParameterSetName='Search')]
        [int]$licenses_count,
        
        [parameter(ParameterSetName='Search')]
        [int]$accessories_count,
        
        [parameter(ParameterSetName='Search')]
        [int]$consumables_count,
        
        [parameter(ParameterSetName='Search')]
        [ValidateSet("asc", "desc")]
        [string]$order = "desc",

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

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

        [parameter(ParameterSetName='Search')]
        [parameter(ParameterSetName='Get users a specific accessory id has been checked out to')]
        [switch]$all = $false,

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

        [parameter(mandatory = $false)]
        [string]$apiKey
    )

    begin {
        Test-SnipeitAlias -invocationName $MyInvocation.InvocationName -commandName $MyInvocation.MyCommand.Name

        $SearchParameter = . Get-ParameterValue -Parameters $MyInvocation.MyCommand.Parameters -BoundParameters $PSBoundParameters
        switch ($PsCmdlet.ParameterSetName) {
            'Search' { $api = "/api/v1/users"}
            'Get with id'  {$api= "/api/v1/users/$id"}
            'Get users a specific accessory id has been checked out to' {$api= "/api/v1/accessories/$accessory_id/checkedout"}
        }

        $Parameters = @{
            Api           = $api
            Method        = 'Get'
            GetParameters = $SearchParameter
        }

        if ($PSBoundParameters.ContainsKey('apiKey') -and '' -ne [string]$apiKey) {
            Write-Warning "-apiKey parameter is deprecated, please use Connect-SnipeitPS instead."
            Set-SnipeitPSLegacyApiKey -apiKey $apikey
        }

        if ($PSBoundParameters.ContainsKey('url') -and '' -ne [string]$url) {
            Write-Warning "-url parameter is deprecated, please use Connect-SnipeitPS instead."
            Set-SnipeitPSLegacyUrl -url $url
        }
    }
    process {
        if ($all) {
            $offstart = $(if ($offset) {$offset} Else {0})
            $callargs = $SearchParameter
            $callargs.Remove('all')

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

    end {
        # reset legacy sessions
        if ($PSBoundParameters.ContainsKey('url') -and '' -ne [string]$url -or $PSBoundParameters.ContainsKey('apiKey') -and '' -ne [string]$apiKey) {
            Reset-SnipeitPSLegacyApi
        }
    }
}