functions/Get-PBMWorkspace.ps1


<#
.SYNOPSIS
Returns Power BI Workspace info.
 
.DESCRIPTION
This command returns the Workspace information for all Workspaces or for a specific workspace if the workspaceName parameter is
provided. This command is used within other commands to retrieve Workspace ID where a Workspace Name is provided.
 
.PARAMETER authToken
This is the required API authentication token (string) generated by the Get-PBIAuthTokenUnattended or Get-PBIAuthTokenPrompt commands.
 
.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-PBMWorkspace -authToken $auth
Get-PBMWorkspace -authToken $auth -workspaceName 'Workspace Name'
 
.NOTES
General notes
#>

function Get-PBMWorkspace {

    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory = $true)]
        [string]
        $authToken,

        [string]
        $workspaceName
    )

    Begin {

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

        try {

            if ($workspaceName) {
                Write-Verbose 'Workspace Name provided. Fetching all Workspaces'
                $uri = "https://api.powerbi.com/v1.0/myorg/groups"
                $workspace = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET

                Write-Verbose 'Matching Workspace Name to ID'
                $workspaces = $workspace.value | Where-Object {$_.name -eq $workspaceName}
            }
            else {
                $uri = "https://api.powerbi.com/v1.0/myorg/groups"

                $workspace = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET
                $workspaces = $workspace.value
            }
        }
        catch {
            throw "Error retrieving Workspaces from API: $($_.Exception.Message)"
        }

    }
    End {
        Write-Verbose 'Returning Workspace info'
        return $workspaces

    }
}