MicrosoftFabricMgmt.Format.ps1xml
|
<?xml version="1.0" encoding="utf-8"?>
<Configuration> <ViewDefinitions> <!-- ============================================================================= Fabric Item View - Default view for most Fabric items ============================================================================= Used for: Lakehouse, Notebook, Warehouse, DataPipeline, Environment, etc. Display Priority: Capacity Name, Workspace Name, Item Name, Item Type, ID --> <View> <Name>FabricItemView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Item</TypeName> <TypeName>MicrosoftFabric.AdminItem</TypeName> <TypeName>MicrosoftFabric.ApacheAirflowJob</TypeName> <TypeName>MicrosoftFabric.CopyJob</TypeName> <TypeName>MicrosoftFabric.CosmosDBDatabase</TypeName> <TypeName>MicrosoftFabric.Dashboard</TypeName> <TypeName>MicrosoftFabric.DataPipeline</TypeName> <TypeName>MicrosoftFabric.Datamart</TypeName> <TypeName>MicrosoftFabric.Environment</TypeName> <TypeName>MicrosoftFabric.Eventhouse</TypeName> <TypeName>MicrosoftFabric.Eventstream</TypeName> <TypeName>MicrosoftFabric.ExternalDataShare</TypeName> <TypeName>MicrosoftFabric.Folder</TypeName> <TypeName>MicrosoftFabric.GraphQLApi</TypeName> <TypeName>MicrosoftFabric.GraphModel</TypeName> <TypeName>MicrosoftFabric.KQLDashboard</TypeName> <TypeName>MicrosoftFabric.KQLDatabase</TypeName> <TypeName>MicrosoftFabric.KQLQueryset</TypeName> <TypeName>MicrosoftFabric.Lakehouse</TypeName> <TypeName>MicrosoftFabric.ManagedPrivateEndpoint</TypeName> <TypeName>MicrosoftFabric.MirroredDatabase</TypeName> <TypeName>MicrosoftFabric.MirroredWarehouse</TypeName> <TypeName>MicrosoftFabric.MLExperiment</TypeName> <TypeName>MicrosoftFabric.MLModel</TypeName> <TypeName>MicrosoftFabric.MountedDataFactory</TypeName> <TypeName>MicrosoftFabric.Notebook</TypeName> <TypeName>MicrosoftFabric.OneLakeShortcut</TypeName> <TypeName>MicrosoftFabric.PaginatedReport</TypeName> <TypeName>MicrosoftFabric.Reflex</TypeName> <TypeName>MicrosoftFabric.Report</TypeName> <TypeName>MicrosoftFabric.SemanticModel</TypeName> <TypeName>MicrosoftFabric.SnowflakeDatabase</TypeName> <TypeName>MicrosoftFabric.SparkJobDefinition</TypeName> <TypeName>MicrosoftFabric.SQLEndpoint</TypeName> <TypeName>MicrosoftFabric.SQLDatabase</TypeName> <TypeName>MicrosoftFabric.Dataflow</TypeName> <TypeName>MicrosoftFabric.VariableLibrary</TypeName> <TypeName>MicrosoftFabric.Warehouse</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Capacity Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Workspace Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Item Name</Label> <Width>30</Width> </TableColumnHeader> <TableColumnHeader> <Label>Type</Label> <Width>15</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Capacity Name - Resolve from capacityId if present, else cascade through workspaceId --> <TableColumnItem> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } elseif ($_.workspaceId) { # Cascade: workspaceId -> capacityId -> capacity name try { $capacityId = Resolve-FabricCapacityIdFromWorkspace -WorkspaceId $_.workspaceId if ($capacityId) { Resolve-FabricCapacityName -CapacityId $capacityId } else { 'N/A' } } catch { 'N/A' } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Workspace Name - Resolve from workspaceId if present --> <TableColumnItem> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Item Name (displayName or name) --> <TableColumnItem> <ScriptBlock> if ($_.displayName) { $_.displayName } elseif ($_.name) { $_.name } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Item Type --> <TableColumnItem> <PropertyName>type</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Workspace View - For workspace objects ============================================================================= Display Priority: Capacity Name, Workspace Name, Type, ID --> <View> <Name>WorkspaceView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Workspace</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Capacity Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Workspace Name</Label> <Width>35</Width> </TableColumnHeader> <TableColumnHeader> <Label>Type</Label> <Width>15</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Capacity Name - Resolve from capacityId --> <TableColumnItem> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Workspace Name (displayName) --> <TableColumnItem> <PropertyName>displayName</PropertyName> </TableColumnItem> <!-- Type --> <TableColumnItem> <PropertyName>type</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Admin Workspace View - For workspace objects from admin API ============================================================================= Display Priority: Capacity Name, Workspace Name, State, Type, ID Note: Admin API returns 'name' instead of 'displayName' --> <View> <Name>AdminWorkspaceView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.AdminWorkspace</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Capacity Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Workspace Name</Label> <Width>30</Width> </TableColumnHeader> <TableColumnHeader> <Label>State</Label> <Width>10</Width> </TableColumnHeader> <TableColumnHeader> <Label>Type</Label> <Width>15</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Capacity Name - Resolve from capacityId --> <TableColumnItem> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Workspace Name (name - not displayName in admin API) --> <TableColumnItem> <PropertyName>name</PropertyName> </TableColumnItem> <!-- State --> <TableColumnItem> <PropertyName>state</PropertyName> </TableColumnItem> <!-- Type --> <TableColumnItem> <PropertyName>type</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Admin Report View - For report objects from admin API ============================================================================= Display Priority: Workspace Name, Report Name, Dataset ID, ID --> <View> <Name>AdminReportView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.AdminReport</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Workspace Name</Label> <Width>30</Width> </TableColumnHeader> <TableColumnHeader> <Label>Report Name</Label> <Width>35</Width> </TableColumnHeader> <TableColumnHeader> <Label>Dataset ID</Label> <Width>36</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Workspace Name - Resolve from workspaceId --> <TableColumnItem> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Report Name --> <TableColumnItem> <PropertyName>name</PropertyName> </TableColumnItem> <!-- Dataset ID --> <TableColumnItem> <PropertyName>datasetId</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Capacity View - For capacity objects ============================================================================= Display Priority: Capacity Name, Region, State, SKU, ID --> <View> <Name>CapacityView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Capacity</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Capacity Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Region</Label> <Width>20</Width> </TableColumnHeader> <TableColumnHeader> <Label>State</Label> <Width>12</Width> </TableColumnHeader> <TableColumnHeader> <Label>SKU</Label> <Width>10</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Capacity Name --> <TableColumnItem> <PropertyName>displayName</PropertyName> </TableColumnItem> <!-- Region --> <TableColumnItem> <PropertyName>region</PropertyName> </TableColumnItem> <!-- State --> <TableColumnItem> <PropertyName>state</PropertyName> </TableColumnItem> <!-- SKU --> <TableColumnItem> <PropertyName>sku</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Domain View - For domain objects ============================================================================= Display Priority: Domain Name, Description, Parent Domain ID, ID --> <View> <Name>DomainView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Domain</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Domain Name</Label> <Width>30</Width> </TableColumnHeader> <TableColumnHeader> <Label>Description</Label> <Width>40</Width> </TableColumnHeader> <TableColumnHeader> <Label>Parent Domain ID</Label> <Width>20</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Domain Name --> <TableColumnItem> <PropertyName>displayName</PropertyName> </TableColumnItem> <!-- Description --> <TableColumnItem> <PropertyName>description</PropertyName> </TableColumnItem> <!-- Parent Domain ID --> <TableColumnItem> <PropertyName>parentDomainId</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Role Assignment View - For workspace role assignments ============================================================================= Display Priority: Capacity Name, Workspace Name, Principal Name, Type, Role, ID Note: WorkspaceId must be added to objects for workspace name resolution --> <View> <Name>RoleAssignmentView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.WorkspaceRoleAssignment</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Capacity Name</Label> <Width>20</Width> </TableColumnHeader> <TableColumnHeader> <Label>Workspace Name</Label> <Width>22</Width> </TableColumnHeader> <TableColumnHeader> <Label>Principal</Label> <Width>28</Width> </TableColumnHeader> <TableColumnHeader> <Label>Type</Label> <Width>12</Width> </TableColumnHeader> <TableColumnHeader> <Label>Role</Label> <Width>12</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Capacity Name - Cascade through workspaceId --> <TableColumnItem> <ScriptBlock> if ($_.workspaceId) { try { $capacityId = Resolve-FabricCapacityIdFromWorkspace -WorkspaceId $_.workspaceId if ($capacityId) { Resolve-FabricCapacityName -CapacityId $capacityId } else { 'N/A' } } catch { 'N/A' } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Workspace Name - Resolve from workspaceId if present --> <TableColumnItem> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Principal Name (DisplayName or UserPrincipalName) --> <TableColumnItem> <ScriptBlock> if ($_.DisplayName) { $_.DisplayName } elseif ($_.UserPrincipalName) { $_.UserPrincipalName } else { $_.PrincipalId } </ScriptBlock> </TableColumnItem> <!-- Type --> <TableColumnItem> <PropertyName>Type</PropertyName> </TableColumnItem> <!-- Role --> <TableColumnItem> <PropertyName>Role</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>ID</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= Job View - For job-related objects (Spark jobs, Copy jobs, etc.) ============================================================================= Display Priority: Job Name, Workspace Name, Status, Type, ID --> <View> <Name>JobView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.SparkJob</TypeName> <TypeName>MicrosoftFabric.CopyJob</TypeName> <TypeName>MicrosoftFabric.ApacheAirflowJob</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>Job Name</Label> <Width>30</Width> </TableColumnHeader> <TableColumnHeader> <Label>Workspace Name</Label> <Width>25</Width> </TableColumnHeader> <TableColumnHeader> <Label>Status</Label> <Width>15</Width> </TableColumnHeader> <TableColumnHeader> <Label>Type</Label> <Width>15</Width> </TableColumnHeader> <TableColumnHeader> <Label>ID</Label> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <!-- Job Name --> <TableColumnItem> <PropertyName>displayName</PropertyName> </TableColumnItem> <!-- Workspace Name - Resolve from workspaceId --> <TableColumnItem> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </TableColumnItem> <!-- Status --> <TableColumnItem> <PropertyName>status</PropertyName> </TableColumnItem> <!-- Type --> <TableColumnItem> <PropertyName>type</PropertyName> </TableColumnItem> <!-- ID --> <TableColumnItem> <PropertyName>id</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> <!-- ============================================================================= LIST VIEWS - For Format-List output ============================================================================= --> <!-- Fabric Item List View - For Format-List on most Fabric items --> <View> <Name>FabricItemListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Item</TypeName> <TypeName>MicrosoftFabric.ApacheAirflowJob</TypeName> <TypeName>MicrosoftFabric.CopyJob</TypeName> <TypeName>MicrosoftFabric.CosmosDBDatabase</TypeName> <TypeName>MicrosoftFabric.Dashboard</TypeName> <TypeName>MicrosoftFabric.DataPipeline</TypeName> <TypeName>MicrosoftFabric.Datamart</TypeName> <TypeName>MicrosoftFabric.Environment</TypeName> <TypeName>MicrosoftFabric.Eventhouse</TypeName> <TypeName>MicrosoftFabric.Eventstream</TypeName> <TypeName>MicrosoftFabric.ExternalDataShare</TypeName> <TypeName>MicrosoftFabric.Folder</TypeName> <TypeName>MicrosoftFabric.GraphQLApi</TypeName> <TypeName>MicrosoftFabric.GraphModel</TypeName> <TypeName>MicrosoftFabric.KQLDashboard</TypeName> <TypeName>MicrosoftFabric.KQLDatabase</TypeName> <TypeName>MicrosoftFabric.KQLQueryset</TypeName> <TypeName>MicrosoftFabric.Lakehouse</TypeName> <TypeName>MicrosoftFabric.ManagedPrivateEndpoint</TypeName> <TypeName>MicrosoftFabric.MirroredDatabase</TypeName> <TypeName>MicrosoftFabric.MirroredWarehouse</TypeName> <TypeName>MicrosoftFabric.MLExperiment</TypeName> <TypeName>MicrosoftFabric.MLModel</TypeName> <TypeName>MicrosoftFabric.MountedDataFactory</TypeName> <TypeName>MicrosoftFabric.Notebook</TypeName> <TypeName>MicrosoftFabric.OneLakeShortcut</TypeName> <TypeName>MicrosoftFabric.PaginatedReport</TypeName> <TypeName>MicrosoftFabric.Reflex</TypeName> <TypeName>MicrosoftFabric.Report</TypeName> <TypeName>MicrosoftFabric.SemanticModel</TypeName> <TypeName>MicrosoftFabric.SnowflakeDatabase</TypeName> <TypeName>MicrosoftFabric.SparkJobDefinition</TypeName> <TypeName>MicrosoftFabric.SQLEndpoint</TypeName> <TypeName>MicrosoftFabric.SQLDatabase</TypeName> <TypeName>MicrosoftFabric.Dataflow</TypeName> <TypeName>MicrosoftFabric.VariableLibrary</TypeName> <TypeName>MicrosoftFabric.Warehouse</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Capacity Name</Label> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } elseif ($_.workspaceId) { try { $capacityId = Resolve-FabricCapacityIdFromWorkspace -WorkspaceId $_.workspaceId if ($capacityId) { Resolve-FabricCapacityName -CapacityId $capacityId } else { 'N/A' } } catch { 'N/A' } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Capacity ID</Label> <ScriptBlock> if ($_.capacityId) { $_.capacityId } elseif ($_.workspaceId) { try { Resolve-FabricCapacityIdFromWorkspace -WorkspaceId $_.workspaceId } catch { 'N/A' } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Workspace Name</Label> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Workspace ID</Label> <PropertyName>workspaceId</PropertyName> </ListItem> <ListItem> <Label>Item Name</Label> <PropertyName>displayName</PropertyName> </ListItem> <ListItem> <Label>Type</Label> <PropertyName>type</PropertyName> </ListItem> <ListItem> <Label>ID</Label> <PropertyName>id</PropertyName> </ListItem> <ListItem> <Label>Description</Label> <PropertyName>description</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- Workspace List View - For Format-List on workspace objects --> <View> <Name>WorkspaceListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Workspace</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Capacity Name</Label> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Capacity ID</Label> <PropertyName>capacityId</PropertyName> </ListItem> <ListItem> <Label>Workspace Name</Label> <PropertyName>displayName</PropertyName> </ListItem> <ListItem> <Label>Workspace ID</Label> <PropertyName>id</PropertyName> </ListItem> <ListItem> <Label>Type</Label> <PropertyName>type</PropertyName> </ListItem> <ListItem> <Label>Description</Label> <PropertyName>description</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- Capacity List View - For Format-List on capacity objects --> <View> <Name>CapacityListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Capacity</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Capacity Name</Label> <PropertyName>displayName</PropertyName> </ListItem> <ListItem> <Label>Capacity ID</Label> <PropertyName>id</PropertyName> </ListItem> <ListItem> <Label>Region</Label> <PropertyName>region</PropertyName> </ListItem> <ListItem> <Label>State</Label> <PropertyName>state</PropertyName> </ListItem> <ListItem> <Label>SKU</Label> <PropertyName>sku</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- Domain List View - For Format-List on domain objects --> <View> <Name>DomainListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.Domain</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Domain Name</Label> <PropertyName>displayName</PropertyName> </ListItem> <ListItem> <Label>Domain ID</Label> <PropertyName>id</PropertyName> </ListItem> <ListItem> <Label>Description</Label> <PropertyName>description</PropertyName> </ListItem> <ListItem> <Label>Parent Domain ID</Label> <PropertyName>parentDomainId</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- Role Assignment List View - For Format-List on workspace role assignments --> <View> <Name>RoleAssignmentListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.WorkspaceRoleAssignment</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Capacity Name</Label> <ScriptBlock> if ($_.workspaceId) { try { $capacityId = Resolve-FabricCapacityIdFromWorkspace -WorkspaceId $_.workspaceId if ($capacityId) { Resolve-FabricCapacityName -CapacityId $capacityId } else { 'N/A' } } catch { 'N/A' } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Workspace Name</Label> <ScriptBlock> if ($_.workspaceId) { try { Resolve-FabricWorkspaceName -WorkspaceId $_.workspaceId } catch { $_.workspaceId } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Workspace ID</Label> <PropertyName>workspaceId</PropertyName> </ListItem> <ListItem> <Label>Principal</Label> <ScriptBlock> if ($_.DisplayName) { $_.DisplayName } elseif ($_.UserPrincipalName) { $_.UserPrincipalName } else { $_.PrincipalId } </ScriptBlock> </ListItem> <ListItem> <Label>Principal ID</Label> <PropertyName>PrincipalId</PropertyName> </ListItem> <ListItem> <Label>Type</Label> <PropertyName>Type</PropertyName> </ListItem> <ListItem> <Label>Role</Label> <PropertyName>Role</PropertyName> </ListItem> <ListItem> <Label>ID</Label> <PropertyName>ID</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- Admin Workspace List View - For Format-List on admin workspace objects Note: Admin API returns 'name' instead of 'displayName' --> <View> <Name>AdminWorkspaceListView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.AdminWorkspace</TypeName> </ViewSelectedBy> <ListControl> <ListEntries> <ListEntry> <ListItems> <ListItem> <Label>Capacity Name</Label> <ScriptBlock> if ($_.capacityId) { try { Resolve-FabricCapacityName -CapacityId $_.capacityId } catch { $_.capacityId } } else { 'N/A' } </ScriptBlock> </ListItem> <ListItem> <Label>Capacity ID</Label> <PropertyName>capacityId</PropertyName> </ListItem> <ListItem> <Label>Workspace Name</Label> <PropertyName>name</PropertyName> </ListItem> <ListItem> <Label>Workspace ID</Label> <PropertyName>id</PropertyName> </ListItem> <ListItem> <Label>State</Label> <PropertyName>state</PropertyName> </ListItem> <ListItem> <Label>Type</Label> <PropertyName>type</PropertyName> </ListItem> <ListItem> <Label>Domain ID</Label> <PropertyName>domainId</PropertyName> </ListItem> </ListItems> </ListEntry> </ListEntries> </ListControl> </View> <!-- ============================================================================= OneLake Data Access Role View ============================================================================= The role schema is deeply nested (decisionRules -> permission/constraints, members -> fabricItemMembers/microsoftEntraMembers). A standard table or list view collapses these to "System.Object[]". This CustomControl renders a human-readable indented summary of all nested properties. The PSObject is still returned to the pipeline unchanged; this only affects terminal display. --> <View> <Name>OneLakeDataAccessRoleView</Name> <ViewSelectedBy> <TypeName>MicrosoftFabric.OneLakeDataAccessRole</TypeName> </ViewSelectedBy> <CustomControl> <CustomEntries> <CustomEntry> <CustomItem> <ExpressionBinding> <ScriptBlock> $sb = [System.Text.StringBuilder]::new() [void]$sb.AppendLine("Role Name : $($_.name)") if ($_.id) { [void]$sb.AppendLine("ID : $($_.id)") } if ($_.kind) { [void]$sb.AppendLine("Kind : $($_.kind)") } if ($_.decisionRules -and $_.decisionRules.Count -gt 0) { [void]$sb.AppendLine("") [void]$sb.AppendLine("Decision Rules:") $ruleNum = 1 foreach ($rule in $_.decisionRules) { [void]$sb.AppendLine(" Rule $ruleNum ($($rule.effect)):") foreach ($perm in $rule.permission) { $vals = ($perm.attributeValueIncludedIn -join ', ') [void]$sb.AppendLine(" $($perm.attributeName.PadRight(8)): $vals") } if ($rule.constraints) { if ($rule.constraints.rows -and $rule.constraints.rows.Count -gt 0) { [void]$sb.AppendLine(" Row Filters:") foreach ($row in $rule.constraints.rows) { [void]$sb.AppendLine(" Table : $($row.tablePath)") [void]$sb.AppendLine(" Filter: $($row.value)") } } if ($rule.constraints.columns -and $rule.constraints.columns.Count -gt 0) { [void]$sb.AppendLine(" Column Filters:") foreach ($col in $rule.constraints.columns) { [void]$sb.AppendLine(" Table : $($col.tablePath)") [void]$sb.AppendLine(" Columns: $($col.columnNames -join ', ') (Effect: $($col.columnEffect), Actions: $($col.columnAction -join ', '))") } } } $ruleNum++ } } [void]$sb.AppendLine("") [void]$sb.AppendLine("Members:") $hasMembers = $false if ($_.members.fabricItemMembers -and $_.members.fabricItemMembers.Count -gt 0) { $hasMembers = $true [void]$sb.AppendLine(" Fabric Item Members:") foreach ($m in $_.members.fabricItemMembers) { [void]$sb.AppendLine(" $($m.sourcePath) -> $($m.itemAccess -join ', ')") } } if ($_.members.microsoftEntraMembers -and $_.members.microsoftEntraMembers.Count -gt 0) { $hasMembers = $true [void]$sb.AppendLine(" Microsoft Entra Members:") foreach ($m in $_.members.microsoftEntraMembers) { $line = " $($m.objectId)" if ($m.objectType) { $line += " [$($m.objectType)]" } if ($m.tenantId) { $line += " Tenant: $($m.tenantId)" } [void]$sb.AppendLine($line) } } if (-not $hasMembers) { [void]$sb.AppendLine(" (none)") } $sb.ToString() </ScriptBlock> </ExpressionBinding> </CustomItem> </CustomEntry> </CustomEntries> </CustomControl> </View> </ViewDefinitions> </Configuration> |