$rootPath      = "master:/sitecore/content"
$formsRoot     = "master:/sitecore/Forms"
$formRendering = Get-Item "master:/sitecore/layout/Renderings/System/Forms/Mvc Form"

$defaultDevice = Get-LayoutDevice -Default
$forms = Get-ChildItem -Path $formsRoot -Recurse |
         Where-Object { $_.TemplateName -eq "Form" }

$formLookup = @{}
foreach ($form in $forms) {
    $formLookup[$form.ID.ToString()] = $form
}

$pages = Get-ChildItem -Path $rootPath -Recurse

$result = New-Object System.Collections.Generic.List[object]

foreach ($page in $pages) {
    $renderings = Get-Rendering `
        -Item $page `
        -Device $defaultDevice `
        -FinalLayout `
        -Rendering $formRendering

    if (-not $renderings) { continue }

    foreach ($rendering in $renderings) {

        if ($rendering.DataSource -and $formLookup.ContainsKey($rendering.DataSource)) {
            $form = $formLookup[$rendering.DataSource]

            $result.Add([pscustomobject]@{
                FormName      = $form.Name
                FormPath      = $form.Paths.FullPath
                PageName      = $page.Name
                PagePath      = $page.Paths.FullPath
                DataSource    = $rendering.DataSource
                RenderingName = $formRendering.Name
            })
        }
    }
}

if ($result.Count -eq 0) {
    Show-Alert "No forms found as datasources under $rootPath"
}

else {
    $result | Sort-Object FormName, PagePath | Show-ListView -Title "Forms report" -Property `
            @{ Label = "Form Name";  Expression = { $_.FormName } },
            @{ Label = "Form Path";  Expression = { $_.FormPath } },
            @{ Label = "Page Name";  Expression = { $_.PageName } },
            @{ Label = "Page Path";  Expression = { $_.PagePath } },
            @{ Label = "Form ID";    Expression = { $_.DataSource } }
}