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

.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" )
    }
}