← Files Power BI DesktopARCHIVED FILE

scripts/PowerBIFabricSnapshot.Shared.ps1

3.51 KB · Oct 2, 2026 · 00:32 UTC

↓ Download file

function Resolve-FabricSnapshotDirectory {
    param([string]$SnapshotDirectory, [string]$DefaultName = 'minimal')
    if ($SnapshotDirectory -and (Test-Path -LiteralPath $SnapshotDirectory)) {
        return (Resolve-Path -LiteralPath $SnapshotDirectory).Path
    }
    $scriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
    $candidate = Join-Path (Split-Path -Parent $scriptRoot) "examples/fabric-snapshot/$DefaultName"
    if (Test-Path -LiteralPath $candidate) { return (Resolve-Path -LiteralPath $candidate).Path }
    return $null
}

function Read-FabricSnapshotFile {
    param([string]$SnapshotRoot, [string]$Name, $Fallback = @())
    if (-not $SnapshotRoot) { return $Fallback }
    $path = Join-Path $SnapshotRoot $Name
    if (Test-Path -LiteralPath $path) {
        $raw = Get-Content -Raw -LiteralPath $path
        if ([string]::IsNullOrWhiteSpace($raw)) { return $Fallback }
        return $raw | ConvertFrom-Json
    }
    return $Fallback
}

function Get-FabricSnapshot {
    param([string]$SnapshotDirectory, [string]$DefaultName = 'minimal')
    $root = Resolve-FabricSnapshotDirectory -SnapshotDirectory $SnapshotDirectory -DefaultName $DefaultName
    $workspace = Read-FabricSnapshotFile -SnapshotRoot $root -Name 'workspace.json' -Fallback ([pscustomobject]@{ id = $null; name = 'Unknown Fabric workspace'; owners = @() })
    [pscustomobject]@{
        root = $root
        workspace = $workspace
        items = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'items.json' -Fallback @())
        reports = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'reports.json' -Fallback @())
        semanticModels = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'semantic-models.json' -Fallback @())
        refreshHistory = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'refresh-history.json' -Fallback @())
        lineage = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'lineage.json' -Fallback @())
        deploymentPipelines = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'deployment-pipelines.json' -Fallback @())
        capacities = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'capacities.json' -Fallback @())
        gateways = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'gateways.json' -Fallback @())
        activity = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'activity.json' -Fallback @())
        endorsements = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'endorsements.json' -Fallback @())
        sensitivityLabels = @(Read-FabricSnapshotFile -SnapshotRoot $root -Name 'sensitivity-labels.json' -Fallback @())
    }
}

function Write-FabricResult {
    param($Result, [string]$OutputPath, [switch]$Json)
    if ($Json) {
        $text = $Result | ConvertTo-Json -Depth 12
        if ($OutputPath) { Set-Content -LiteralPath $OutputPath -Value $text -Encoding UTF8 }
        $text
        return
    }
    $lines = @("# $($Result.title)", '', "Status: **$($Result.status)**")
    if ($Result.findings) {
        $lines += @('', '## Findings')
        $lines += @($Result.findings | ForEach-Object { "- [$($_.severity)] $($_.area): $($_.message)" })
    }
    $content = ($lines -join [Environment]::NewLine) + [Environment]::NewLine
    if ($OutputPath) { Set-Content -LiteralPath $OutputPath -Value $content -Encoding UTF8 }
    $content
}

function New-FabricFinding {
    param([string]$Severity, [string]$Area, [string]$Message)
    [pscustomobject]@{ severity = $Severity; area = $Area; message = $Message }
}

SHA-256: 459c4fcd4fa3b6bc07b2727be4441b679d3d6219fe2088c46fbd25ca1f396695