Users.psm1




<#
.SYNOPSIS
    The get users operation will retrieve a list of users from your company.
.DESCRIPTION
    The get users operation will retrieve a list of users from your company. This can be either all users, or users filtered by enabled / disabled.
.PARAMETER Userame
    Specifies the username of a user to retrieve, can be specified as an array of strings to retrieve multiple users
.PARAMETER UserGuid
    Specifies the Guid of a user to retrieve, can be specified as an array of Guids to retrieve multiple users
.PARAMETER UserType
    Specifies the type of user to retrieve, can be enabled, disabled or All
.PARAMETER CompanyName
    The companyname that's used in the helloId URL to know which HelloID tenant to talk to. Required if not connected with Connect-HelloId.
.PARAMETER ApiKey
    The Apikey to use for the api call. Required if not connected with Connect-HelloId.
.PARAMETER ApiSecret
    The Apisecret belonging to the apikey, has to be a securestring. Required if not connected with Connect-HelloId.
.EXAMPLE
    Get-HidUser
    Returns all the HidUsers in the tenant
.EXAMPLE
    Get-HidUser -UserType Disabled
    Returns all Disabled useraccounts in the tenant
.EXAMPLE
    Get-HidUser -Username user@testdomain.com
    Returns only the user with the specified username
.INPUTS
    
.OUTPUTS
    
#>

function Get-HidUser {
    [CmdletBinding(DefaultParameterSetName = 'guid',PositionalBinding = $false)]
    [Alias()]
    [OutputType([String])]
    Param ( 
        # the name of an existing variable
        [Parameter(Mandatory = $false,
        ValueFromPipeline = $true,
        ValueFromPipelineByPropertyName = $true,
        ParameterSetName = "guid")]
        [ValidateNotNullOrEmpty()]
        [guid[]]$UserGuid, 
    
        # the name of an existing variable
        [Parameter(Mandatory = $false,
        ValueFromPipeline = $true,
        ValueFromPipelineByPropertyName = $true,
        ParameterSetName = "Name")]
        [ValidateNotNullOrEmpty()]
        [string[]]$Username,
        
        [Parameter(Mandatory=$false,
        ValueFromPipeline=$false,
        ParameterSetName = "allusers")]
        [ValidateSet('Enabled','Disabled','All')]
        [string]$UserType = 'All',

        # Company name used in the URL
        [Parameter(Mandatory= $false)]
        [ValidateNotNullOrEmpty()]
        [string]$CompanyName,
        
        # Api key
        [Parameter(Mandatory= $false)]
        [ValidateNotNullOrEmpty()]
        [string]$ApiKey,

        # Api secret
        [Parameter(Mandatory= $false)]
        [ValidateNotNullOrEmpty()]
        [securestring]$ApiSecret
    )
    
    begin {

        if ($PSBoundParameters.ContainsKey("CompanyName") -AND $PSBoundParameters.ContainsKey("ApiKey") -AND $PSBoundParameters.ContainsKey("ApiSecret") ){
            Write-Verbose -Message "Using connectioninfo and credentials from parameter"
            #Create credential object for authentication
            $Cred = New-Object System.Management.Automation.PSCredential ($ApiKey, $ApiSecret)
        }
        elseif ($Global:HelloIdConnection.ApiCredentials) {
            Write-Verbose -Message "Using Global connectioninfo and credentials from Connect-HelloId "
            $Cred = $Global:HelloIdConnection.ApiCredentials
            $CompanyName = $Global:HelloIdConnection.CompanyName
        }
        else {            
            throw "Error finding connectioninfo. Connect using Connect-HelloId, or specifie CompanyName, ApiKey and ApiSecret"
        }

        #Headers
        $headers = @{
            "Content-Type" = "application/json"
        }
        
        #Variables
        [array]$resultArray = @()
        $take = 100


    } #End begin
    
    process {        

        if ($PSBoundParameters.ContainsKey("UserGuid")){            
            foreach ($guid in $UserGuid){
                $URI = "https://$CompanyName.helloid.com/api/v1/users/$guid"
                $output = Invoke-RestMethod -Uri $URI -Method "GET" -Headers $headers -Credential $Cred -UseBasicParsing               
                $output
            }

        }
        elseif ($PSBoundParameters.ContainsKey("Username")) {
            foreach ($user in $Username){
                $URI = "https://$CompanyName.helloid.com/api/v1/users/$user"
                $output = Invoke-RestMethod -Uri $URI -Method "GET" -Headers $headers -Credential $Cred -UseBasicParsing
                $output
            }
        }        
        else {

            do {
                
                switch($UserType)
                {
                    "Enabled"
                    {
                        $URI = "https://$CompanyName.helloid.com/api/v1/users?enabled=true" + "&skip=" + $resultArray.Count + "&take=$take"
                    }
                    "Disabled"
                    {
                        $URI = "https://$CompanyName.helloid.com/api/v1/users?enabled=false" + "&skip=" + $resultArray.Count + "&take=$take"
                    }
                    "All"
                    {
                        $URI = "https://$CompanyName.helloid.com/api/v1/users" + "?skip=" + $resultArray.Count + "&take=$take"
                    }
                }  
    
                $output = Invoke-RestMethod -Uri $URI -Method "GET" -Headers $headers -Credential $Cred -UseBasicParsing

                $resultArray += $output


            } while ($output.count -ge $take) #end do-while loop

            $resultArray            
        } #end else
    } #End process
    
    end {
        
    } #End end
} #End function