Get-GitLabUser.ps1

function Get-GitLabUser
{
  <#
      .SYNOPSIS
      Gets Gitlab User
      .DESCRIPTION
      The Get-GitlabUser function retruns a list of users
 
      By default this function returns all available users
      you can filter these users on 'blocked' or 'active'
 
      returns single user if id is passed
 
      Admins can retreive a lot mor info conserning users then non-admins:
      they can serach on 'username' and filter on 'external'
      .EXAMPLE
      Get-GitLabUser
      ---------------------------------------------------------------
      Returns all users including blockedUsers
      .EXAMPLE
      Get-GitLabUser -ID 20
      ---------------------------------------------------------------
      Returns the user with ID 20
      .EXAMPLE
      Get-GitLabUser -Blocked
      ---------------------------------------------------------------
      Returns all users that are blocked
  #>

  [CmdletBinding(DefaultparametersetName = 'AllUsers')]
  [Alias()]
  [OutputType()]
  param(
    #filter Users on state: Active
    [Parameter(ParameterSetName = 'AllUsersActive')]
    [Switch]$Active,

    #Filter users on state: Blocked
    [Parameter(ParameterSetName = 'AllUsersBlocked')]
    [Switch]$Blocked,
      
    #Retrun only external Users
    [Parameter(ParameterSetNAme = 'AllUsersActive')]
    [Parameter(ParameterSetName = 'AllUsersBlocked')]
    [bool]$External,

    #Get single user by ID
    [Parameter(ParameterSetName = 'SingleUserByID',
    Mandatory = $true)]
    [Alias('ID')]
    [int]$UserID,

    #get single user by UserName
    [Parameter(ParameterSetNAme = 'SingleUserByUserName',
    Mandatory = $true)]
    [string]$UserName,

    # Existing GitlabConnector Object, can be retrieved with Get-GitlabConnect
    [Parameter(HelpMessage = 'Specify Existing GitlabConnector',
        Mandatory = $false,
    DontShow = $true)]
    [psobject]$GitlabConnect = (Get-GitLabConnect)
  )
    
  $httpmethod = 'get'
  $apiurl = 'users'
  $parameters = @{}

  if($PSCmdlet.ParameterSetName -like 'AllProjects*')
  {
    if($Active)
    {
      $parameters.'active' = 'true'
    }

    if ($Blocked)
    {
      $parameters.'blocked' = 'true'
    }

    if($PSCmdlet.MyInvocation.BoundParameters.keys -contains 'External')
    {
      if($External)
      {
        $parameters.'external' = 'true'
      }
      else
      {
        $parameters.'external' = 'false'
      }
    }
  }

  if($PSCmdlet.ParameterSetName -eq 'SingleUserByID')
  {
    $apiurl += ('/{0}' -f $UserID)
  }

  if($PSCmdlet.ParameterSetName -eq 'SingleUserByUserName')
  {
    if($UserName)
    {
      $parameters.'username' = $UserName
    }
  }

  $GitlabConnect.callapi($apiurl,$httpmethod,$parameters)
}