Public/Find-LMDashboardWidget.ps1

<#
.SYNOPSIS
Find list of dashboard widgets containing mention of specified datasources

.DESCRIPTION
Find list of dashboard widgets containing mention of specified datasources

.PARAMETER DatasourceNames
Array of datasource names to search for in dashboard widgets. Can also use the alias DatasourceName.

.PARAMETER GroupPathSearchString
Wildcard search string to filter dashboards by group path. Defaults to "*" (all dashboards).

.EXAMPLE
Find-LMDashboardWidget -DatasourceNames @("SNMP_NETWORK_INTERFACES","VMWARE_VCETNER_VM_PERFORMANCE")

.NOTES
Created groups will be placed in a main group called Azure Resources by Subscription in the parent group specified by the -ParentGroupId parameter

.INPUTS
DatasourceNames in an array. You can also pipe datasource names to this widget.

#>

function Find-LMDashboardWidget {
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [Alias("DatasourceName")]
        [String[]]$DatasourceNames,

        [String]$GroupPathSearchString = "*"
    )

    #Check if we are logged in and have valid api creds
    begin {}
    process {
        if ($(Get-LMAccountStatus).Valid) {
            $Results = New-Object System.Collections.ArrayList
            $Dashboards = Get-LMDashboard | Where-Object { $_.groupFullPath -like "$GroupPathSearchString" }

            $i = 0
            $DashCount = ($Dashboards | Measure-Object).Count
            foreach ($Dashboard in $Dashboards) {
                Write-Progress -Activity "Processing Dashboard: $($Dashboard.name)" -Status "$([Math]::Floor($($i/$DashCount*100)))% Completed" -PercentComplete $($i / $DashCount * 100) -Id 0
                $Widgets = Get-LMDashboardWidget -DashboardId $Dashboard.Id

                $GraphWidgets = $Widgets | Where-Object { $_.type -eq "cgraph" }
                if ($GraphWidgets.graphInfo.datapoints.dataSourceFullName) { $GraphWidgetsFiltered = $GraphWidgets.graphInfo.datapoints | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                $BigNumberWidgets = $Widgets | Where-Object { $_.type -eq "bigNumber" }
                if ($BigNumberWidgets.bigNumberInfo.dataPoints.dataSourceFullName) { $BigNumberWidgetsFiltered = $BigNumberWidgets.bigNumberInfo.dataPoints | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                $PieWidgets = $Widgets | Where-Object { $_.type -eq "pieChart" }
                if ($PieWidgets.pieChartInfo.dataPoints.dataSourceFullName) { $PieWidgetsFiltered = $PieWidgets.pieChartInfo.dataPoints | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                $TableWidgets = $Widgets | Where-Object { $_.type -eq "dynamicTable" }
                if ($TableWidgets.dataSourceFullName) { $TableWidgetsFiltered = $TableWidgets | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                $SLAWidgets = $Widgets | Where-Object { $_.type -eq "deviceSLA" }
                if ($SLAWidgets.metrics.dataSourceFullName) { $SLAWidgetsFiltered = $SLAWidgets.metrics | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                $NOCWidgets = $Widgets | Where-Object { $_.type -eq "noc" }
                if ($NOCWidgets.items.dataSourceDisplayName) { $NOCWidgetsFiltered = $NOCWidgets.items | Where-Object { $DatasourceNames -contains $_.dataSourceDisplayName.Replace("\", "") } }

                $GaugeWidgets = $Widgets | Where-Object { $_.type -eq "gauge" }
                if ($GaugeWidgets.dataPoint.dataSourceFullName) { $GaugeWidgetsFiltered = $GaugeWidgets.dataPoint | Where-Object { $DatasourceNames -contains $_.dataSourceFullName.Split("(")[-1].Replace(")", "") } }

                if ($GraphWidgetsFiltered) {
                    $GraphWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "cgraph"
                                widgetId           = ($GraphWidgets | Where-Object { $_.graphInfo.datapoints -eq $RefObj }).Id
                                widgetName         = ($GraphWidgets | Where-Object { $_.graphInfo.datapoints -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($BigNumberWidgetsFiltered) {
                    $BigNumberWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "bigNumber"
                                widgetId           = ($BigNumberWidgets | Where-Object { $_.bigNumberInfo.dataPoints -eq $RefObj }).Id
                                widgetName         = ($BigNumberWidgets | Where-Object { $_.bigNumberInfo.dataPoints -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($PieWidgetsFiltered) {
                    $PieWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "pieChart"
                                widgetId           = ($PieWidgets | Where-Object { $_.pieChartInfo.dataPoints -eq $RefObj }).Id
                                widgetName         = ($PieWidgets | Where-Object { $_.pieChartInfo.dataPoints -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($TableWidgetsFiltered) {
                    $TableWidgetsFiltered | ForEach-Object { $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = "N/A"
                                dataPointName      = "N/A"
                                widgetType         = "dynamicTable"
                                widgetId           = $_.id
                                widgetName         = $_.name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($SLAWidgetsFiltered) {
                    $SLAWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "deviceSLA"
                                widgetId           = ($SLAWidgets | Where-Object { $_.metrics -eq $RefObj }).Id
                                widgetName         = ($SLAWidgets | Where-Object { $_.metrics -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($NOCWidgetsFiltered) {
                    $NOCWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "noc"
                                widgetId           = ($NOCWidgets | Where-Object { $_.items -eq $RefObj }).Id
                                widgetName         = ($NOCWidgets | Where-Object { $_.items -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }

                if ($GaugeWidgetsFiltered) {
                    $GaugeWidgetsFiltered | ForEach-Object { $RefObj = $_ ; $Results.Add([PSCustomObject]@{
                                dataSourceId       = $_.dataSourceId
                                dataSourceFullName = $_.dataSourceFullName
                                dataPointId        = $_.dataPointId
                                dataPointName      = $_.dataPointName
                                widgetType         = "gauge"
                                widgetId           = ($GaugeWidgets | Where-Object { $_.dataPoint -eq $RefObj }).Id
                                widgetName         = ($GaugeWidgets | Where-Object { $_.dataPoint -eq $RefObj }).Name
                                dashboardId        = $Dashboard.id
                                dashboardName      = $Dashboard.name
                                dashboardPath      = $Dashboard.groupFullPath
                            }) | Out-Null }
                }
                $i++
            }

        }
        else {
            Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
        }
    }
    end {
        return (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.WidgetSearch" )
    }
}