Public/Get-IDUser.ps1

# .ExternalHelp IdentityCommand-help.xml
Function Get-IDUser {

    [CmdletBinding(DefaultParameterSetName = 'GetUsers')]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = 'GetUser'
        )]
        [ValidateNotNullOrEmpty()]
        [Alias('Uuid')]
        [String]$ID,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = 'GetUserByName'
        )]
        [ValidateNotNullOrEmpty()]
        [String]$username,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = 'GetUserAttributes'
        )]
        [ValidateNotNullOrEmpty()]
        [Switch]$CurrentUser,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = 'GetTechSupportUser'
        )]
        [ValidateNotNullOrEmpty()]
        [Switch]$TechSupportUser
    )

    BEGIN {
        #ParameterSet name matches URL portion for different requests
        $Request = @{}
        $Request['URI'] = "$($ISPSSSession.tenant_url)/CDirectoryService/$($PSCmdlet.ParameterSetName)"
        $Request['Method'] = 'POST'
    }#begin

    PROCESS {

        #Include a body only if ID or username parameters specified
        switch ($PSBoundParameters.Keys) {
            ({ $PSItem -match 'ID|username' }) {
                $Request['Body'] = $PSBoundParameters | Get-Parameter | ConvertTo-Json
                break
            }
        }

        #Send Request
        $result = Invoke-IDRestMethod @Request

        #if results, output them
        if ($null -ne $result) {
            switch ($PSCmdlet.ParameterSetName) {
                'GetUsers' {
                    #get users results are part of the returned object
                    $result.Results.Row
                }
                default {
                    #single users are returned directly from request
                    $result
                }
            }
        }

    }#process

    END {}#end

}