Public/Get-MondayBoardDetail.ps1
Function Get-MondayBoardDetail { <# .SYNOPSIS Get detailed information about a specific Monday.com board .DESCRIPTION This function retrieves comprehensive information about a specific Monday.com board, including its items, columns, groups, updates, and other detailed properties. .PARAMETER BoardId The ID of the board to retrieve detailed information for .PARAMETER IncludeItems Include all items (rows) in the board .PARAMETER IncludeColumns Include detailed column information .PARAMETER IncludeGroups Include group information .PARAMETER IncludeUpdates Include board updates/activity .PARAMETER IncludeSubscribers Include board subscribers .PARAMETER IncludeViews Include board views .PARAMETER ItemsLimit Maximum number of items to retrieve (default: 100) .PARAMETER ItemsPage Page number for items pagination (default: 1) .EXAMPLE Get-MondayBoardDetail -BoardId 1234567890 Gets basic detailed information about the specified board .EXAMPLE Get-MondayBoardDetail -BoardId 1234567890 -IncludeItems -IncludeColumns Gets board details including all items and columns .EXAMPLE Get-MondayBoard | Get-MondayBoardDetail -IncludeItems Pipeline example: Gets details for all boards including their items .INPUTS System.Int64 .OUTPUTS Monday.BoardDetail .NOTES This function provides more comprehensive information than Get-MondayBoard. Use this when you need complete board data including items and detailed properties. .LINK https://developer.monday.com/api-reference/reference/boards #> [CmdletBinding()] Param( [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [Alias('Id')] [Int64]$BoardId, [Parameter(Mandatory=$false)] [Switch]$IncludeItems, [Parameter(Mandatory=$false)] [Switch]$IncludeColumns, [Parameter(Mandatory=$false)] [Switch]$IncludeGroups, [Parameter(Mandatory=$false)] [Switch]$IncludeUpdates, [Parameter(Mandatory=$false)] [Switch]$IncludeSubscribers, [Parameter(Mandatory=$false)] [Switch]$IncludeViews, [Parameter(Mandatory=$false)] [ValidateRange(1, 500)] [Int]$ItemsLimit = 100, [Parameter(Mandatory=$false)] [ValidateRange(1, [Int]::MaxValue)] [Int]$ItemsPage = 1 ) Begin { Write-Verbose -Message "Starting $($MyInvocation.InvocationName)..." } Process { try { Write-Verbose -Message "Getting detailed information for board ID: $BoardId" # Build field selection based on parameters $fields = @( 'id', 'name', 'description', 'state', 'board_kind', 'permissions', 'url', 'updated_at', 'items_count', 'creator { id name email }', 'owners { id name email }', 'workspace { id name }', 'workspace_id', 'board_folder_id', 'communication', 'item_terminology' ) if ($IncludeColumns) { $fields += @( 'columns { id title type description settings_str archived width }' ) Write-Verbose -Message "Including detailed column information" } if ($IncludeGroups) { $fields += @( 'groups { id title color position archived deleted }' ) Write-Verbose -Message "Including group information" } if ($IncludeItems) { $itemsQuery = "items_page (limit: $ItemsLimit, page: $ItemsPage) { cursor items { id name state created_at updated_at creator { id name email } group { id title } board { id name } column_values { id text value type column { id title type } } } }" $fields += $itemsQuery Write-Verbose -Message "Including items with limit: $ItemsLimit, page: $ItemsPage" } if ($IncludeUpdates) { $fields += @( 'updates (limit: 50) { id body created_at updated_at creator { id name email } replies { id body created_at creator { id name email } } }' ) Write-Verbose -Message "Including updates" } if ($IncludeSubscribers) { $fields += 'subscribers { id name email }' Write-Verbose -Message "Including subscribers" } if ($IncludeViews) { $fields += @( 'views { id name type settings_str }' ) Write-Verbose -Message "Including views" } # Construct the query $fieldString = $fields -join ' ' $query = "query { boards (ids: [$BoardId]) { $fieldString } }" Write-Verbose -Message "GraphQL Query length: $($query.Length) characters" # Execute the query $response = Invoke-MondayApi -Query $query if ($response.boards -and $response.boards.Count -gt 0) { $board = $response.boards[0] # Add type information $board.PSObject.TypeNames.Insert(0, 'Monday.BoardDetail') Write-Verbose -Message "Retrieved detailed information for board: $($board.name)" return $board } else { Write-Warning -Message "Board with ID $BoardId not found or access denied" return $null } } catch { $errorMessage = "Error retrieving Monday board detail for ID ${BoardId}: $($_.Exception.Message)" Write-Error -Message $errorMessage throw $_ } } End { Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..." } } |