functions/Get-WorkspaceUser.ps1


<#
.SYNOPSIS
Returns user info for a workspace or all workspaces
 
.DESCRIPTION
This will return user & role informations for a specified Workspace or in all workspaces if no Workspace parameter is provided
 
.PARAMETER authToken
This is the required API authentication token (string) generated by the Get-PBIAuthTokenUnattended or Get-PBIAuthTokenPrompt commands.
 
.PARAMETER workspaceID
Optional parameter to restrict data to a specific Workspace ID
 
.PARAMETER workspaceName
Optional parameter to restrict data to a specific Workspace Name. The Workspace ID is retrieved using this name by the function
 
.EXAMPLE
Get-WorkspaceUser -authToken $auth
Get-WorkspaceUser -authToken $auth -workspaceID 1530055f-XXXX-XXXX-XXXX-ee8c87e4a648
Get-WorkspaceUser -authToken $auth -workspaceName 'Workspace Name'
 
.NOTES
General notes
#>

function Get-WorkspaceUser{
    
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)]
        [string]
        $authToken,
    
        [string]
        $workspaceID,

        [string]
        $workspaceName
    )

    Begin{

        Write-Verbose 'Building Rest API header with authorization token'
        $authHeader = @{
            'Content-Type'='application/json'
            'Authorization'='Bearer ' + $authToken
        }
    }
    Process{

        try {
            if($workspaceID){                    
                Write-Verbose 'Returning Users for specified Workspace'
                $uri = "https://api.powerbi.com/v1.0/myorg/groups/$($WorkspaceID)/users"

                $workspaceUsers = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET
                $workspaceUsers.value | Add-Member -NotePropertyName "WorkspaceID" -NotePropertyValue $WorkspaceID
            }
            elseif ($workspaceName) {
                
                Write-Verbose 'Workspace Name provided. Matching to ID & building API call'
                $workspace = Get-Workspace -authToken $authToken -workspaceName $workspaceName

                Write-Verbose 'Returning Users for specified Workspace'
                $uri = "https://api.powerbi.com/v1.0/myorg/groups/$($workspace.id)/users"
                
                $workspaceUsers = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET
                $workspaceUsers.value | Add-Member -NotePropertyName "WorkspaceID" -NotePropertyValue $workspace.id
            }
            else {
                Write-Verbose 'Fetching all Workspaces'
                $workspaces = Get-Workspace -authToken $authToken 

                $workspaceUsers = @()

                Write-Verbose 'Returning Users for all Workspaces'
                foreach($workspace in $workspaces)
                {
                    $uri = "https://api.powerbi.com/v1.0/myorg/groups/$($Workspace.id)/users"
                    $users = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET

                    $users.value | Add-Member -NotePropertyName "WorkspaceID" -NotePropertyValue $Workspace.id

                    $workspaceUsers += $users
                    
                }
            }               
            
        }
        catch {
            Write-Error "Error calling REST API: $($_.Exception.Message)"
        }
    }
    End{    
        
        return $workspaceUsers.Value

    }
}