Public/Users/Get-UKGUser.ps1
|
function Get-UKGUser { <# .SYNOPSIS Gets user information from the UKG HR Service Delivery API. .DESCRIPTION Retrieves user data by ID or lists all users with pagination support. Users are typically HR administrators or system users, not employees. .PARAMETER Id The unique identifier of the user to retrieve. .PARAMETER All Retrieves all users. .PARAMETER Count Returns only the count of users (HEAD request). .PARAMETER PerPage Number of results per page (1-100, default 25). .PARAMETER Cursor Pagination cursor for retrieving a specific page. .PARAMETER Fields Array of field names to include in the response. .EXAMPLE Get-UKGUser -Id "user123" .EXAMPLE Get-UKGUser -All .EXAMPLE Get-UKGUser -Count .OUTPUTS UKG.User or array of UKG.User objects, or count if -Count is specified. #> [CmdletBinding(DefaultParameterSetName = 'ById')] [OutputType([PSCustomObject])] param( [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)] [ValidateNotNullOrEmpty()] [Alias('UserId')] [string]$Id, [Parameter(ParameterSetName = 'List')] [switch]$All, [Parameter(Mandatory, ParameterSetName = 'Count')] [switch]$Count, [Parameter(ParameterSetName = 'List')] [ValidateRange(1, 100)] [int]$PerPage = 25, [Parameter(ParameterSetName = 'List')] [string]$Cursor, [Parameter()] [string[]]$Fields ) begin { $queryParams = @{} if ($Fields) { $queryParams['fields'] = $Fields -join ',' } } process { switch ($PSCmdlet.ParameterSetName) { 'ById' { $endpoint = "/users/$Id" $response = Invoke-UKGRequest -Endpoint $endpoint -Method GET -QueryParameters $queryParams if ($response) { $response.PSObject.TypeNames.Insert(0, 'UKG.User') } return $response } 'Count' { $headers = Invoke-UKGRequest -Endpoint '/users' -Method HEAD if ($headers.ContainsKey('X-Total-Count')) { return [int]$headers['X-Total-Count'] } return 0 } 'List' { $queryParams['per_page'] = $PerPage if ($Cursor) { $queryParams['cursor'] = $Cursor } if ($All -and -not $Cursor) { $allUsers = Get-UKGAllPages -Endpoint '/users' -Method GET -QueryParameters $queryParams foreach ($user in $allUsers) { $user.PSObject.TypeNames.Insert(0, 'UKG.User') } return $allUsers } else { $response = Invoke-UKGRequest -Endpoint '/users' -Method GET -QueryParameters $queryParams -ReturnHeaders if ($response.Data) { foreach ($user in $response.Data) { $user.PSObject.TypeNames.Insert(0, 'UKG.User') } $pagination = Get-UKGNextPage -Headers $response.Headers if ($pagination.NextCursor) { Write-Verbose "Next cursor: $($pagination.NextCursor)" } return $response.Data } } } } } } |