Hi Experts,
I have a script to export list of all alert rule created in OMS (Log Analytics). It is running fine and i can see result in my temp folder with name OMSAlert.csv. But when i am running same script in my another Azure subscription for a workspace i am getting error. Its bit strange and i am not ware why its is happening.
The code is as follows:-
param (
#The subscription id where the OMS is located
[Parameter(Mandatory)]
[string]$SubscriptionId,
#The name of the OMS workspace.
[Parameter(Mandatory)]
[string]$WorkspaceID,
#Notification Group shortname
[string]$FilePath="c:\temp"
)
$ErrorActionPreference = "Stop"
#Variables
$OutPath=$FilePath + "\OMSalerts.csv"
#Getting all Workspaces
$allWorkspaces = armclient get "/subscriptions/$SubscriptionId/providers/Microsoft.OperationalInsights/workspaces?api-version=2015-03-20" | ConvertFrom-Json
ForEach($Workspace in $allWorkspaces.value)
{
if($Workspace.name -eq $WorkspaceID)
{
$url = $Workspace.id
}
}
Write-Host "Building table for results"
#Build a table to format the results
$table = New-Object system.Data.DataTable "Results"
$col1 = New-Object system.Data.DataColumn Name,([string])
$table.columns.add($col1)
$col2 = New-Object system.Data.DataColumn Description,([string])
$table.columns.add($col2)
$col3 = New-Object system.Data.DataColumn Threshold,([string])
$table.columns.add($col3)
$col4 = New-Object system.Data.DataColumn Severity,([string])
$table.columns.add($col4)
$col5 = New-Object system.Data.DataColumn Query,([string])
$table.columns.add($col5)
$col6 = New-Object system.Data.DataColumn Interval,([string])
$table.columns.add($col6)
$col7 = New-Object system.Data.DataColumn QueryTimeSpan,([string])
$table.columns.add($col7)
$col8 = New-Object system.Data.DataColumn QueryEnabled,([boolean])
$table.columns.add($col8)
#Get all searches
Write-Host "Getting all searches for Workspace"
$Searches = armclient get "$url/savedsearches?api-version=2015-03-20" | ConvertFrom-Json
if($Searches.value -ne $null)
{
Write-Output "Searches found: $($Searches.value.count)"
}
else
{
Write-Output "No searches found, exiting script"
Break
}
Write-Host "Getting schedules for Searches"
$Searches.value.id | %{
$search = armclient get "$_/?api-version=2015-03-20" | ConvertFrom-Json
$schedules = armclient get "$_/schedules?api-version=2015-03-20" | ConvertFrom-Json
$schedules | %{
$schedule = $_.value.properties
$actions = armclient get "$($_.value.id)/actions?api-version=2015-03-20" | convertfrom-json
$actions | %{
if ($_.value.properties.Type -eq "Alert"){
Write-Host "Alert found: $($_.value.properties.Name)"
$Name=$_.value.properties.Name
$Description=$_.value.properties.Description
$Threshold=$_.value.properties.Threshold
$Severity=$_.value.properties.Severity
$Query=$search.properties.Query
$Interval=$schedule.Interval
$QueryTimeSpan=$schedule.QueryTimeSpan
$QueryEnabled=$schedule.Enabled
$row = $table.NewRow()
$row.Name = $Name
$row.Description = $Description
$row.Threshold = $Threshold.Value
$row.Severity = $Severity
$row.Query = $Query
$row.Interval = $Interval
$row.QueryTimeSpan = $QueryTimeSpan
$row.QueryEnabled = $QueryEnabled
$table.Rows.Add($row)
}
}
}
}
Write-Host "Exporting results"
$table | Export-Csv $OutPath -NoTypeInformation
The error which i am getting is as below:-
convertfrom-json : Invalid JSON primitive: .
At C:\Users\kumar_g\Downloads\retrievealerts-oms.ps1:130 char:80
- … et “$($_.value.id)/actions?api-version=2015-03-20” | convertfrom-json
-
~~~~~~~~~~~~~~~~ - CategoryInfo : NotSpecified: (
[ConvertFrom-Json], ArgumentException - FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
Note:- Same script without any changes running fine for another subscription. I have also replaced api version from 2015-03-20 to 2016-04-01 but still no luck.