Public/Get-LMDiagnosticRemediationExecutionResult.ps1
|
<# .SYNOPSIS Retrieves diagnostic and remediation execution results from LogicMonitor. .DESCRIPTION The Get-LMDiagnosticRemediationExecutionResult function retrieves execution history for diagnostic and remediation modules. All matching results are returned automatically. .PARAMETER AlertId The alert ID to filter execution results. .PARAMETER HostId The host (device) ID to filter execution results. .PARAMETER ModuleType Filter by module type. .PARAMETER DiagnosticSourceId The diagnostic source ID to filter results. .PARAMETER DiagnosticSourceName The diagnostic source name to filter results. Resolved to an ID via Get-LMDiagnosticSource. .PARAMETER RemediationSourceId The remediation source ID to filter results. .PARAMETER RemediationSourceName The remediation source name to filter results. Resolved to an ID via Get-LMRemediationSource. .PARAMETER StartTime Start of the time range to query. .PARAMETER EndTime End of the time range to query. .PARAMETER BatchSize The number of results to return per request. Must be between 1 and 1000. Defaults to 1000. .EXAMPLE Get-LMDiagnosticRemediationExecutionResult -HostId 123 -DiagnosticSourceName "Disk Check" .EXAMPLE Get-LMDiagnosticRemediationExecutionResult -AlertId "DS12345" .NOTES You must run Connect-LMAccount before running this command. .INPUTS None. You cannot pipe objects to this command. .OUTPUTS Returns LogicMonitor.DiagnosticRemediationExecutionResult objects. #> function Get-LMDiagnosticRemediationExecutionResult { [CmdletBinding(DefaultParameterSetName = 'Host')] param ( [Parameter(Mandatory, ParameterSetName = 'Alert')] [String]$AlertId, [Parameter(Mandatory, ParameterSetName = 'Host')] [Int]$HostId, [String]$ModuleType, [Int]$DiagnosticSourceId, [String]$DiagnosticSourceName, [Int]$RemediationSourceId, [String]$RemediationSourceName, [DateTime]$StartTime, [DateTime]$EndTime, [ValidateRange(1, 1000)] [Int]$BatchSize = 1000 ) if (-not $Script:LMAuth.Valid) { Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again." return } if ($DiagnosticSourceName) { $LookupResult = (Get-LMDiagnosticSource -Name $DiagnosticSourceName).Id if (Test-LookupResult -Result $LookupResult -LookupString $DiagnosticSourceName) { return } $DiagnosticSourceId = $LookupResult } if ($RemediationSourceName) { $LookupResult = (Get-LMRemediationSource -Name $RemediationSourceName).Id if (Test-LookupResult -Result $LookupResult -LookupString $RemediationSourceName) { return } $RemediationSourceId = $LookupResult } $ResourcePath = "/setting/diagnosticRemediation/executionResults" $CommandInvocation = $MyInvocation $CallerPSCmdlet = $PSCmdlet $QueryParams = @("perPageCount=$BatchSize") if ($AlertId) { $QueryParams += "alertId=$AlertId" } if ($PSBoundParameters.ContainsKey('HostId')) { $QueryParams += "hostId=$HostId" } if ($ModuleType) { $QueryParams += "moduleType=$ModuleType" } if ($PSBoundParameters.ContainsKey('DiagnosticSourceId')) { $QueryParams += "diagnosticSourceId=$DiagnosticSourceId" } if ($DiagnosticSourceName) { $QueryParams += "diagnosticSourceName=$DiagnosticSourceName" } if ($PSBoundParameters.ContainsKey('RemediationSourceId')) { $QueryParams += "remediationSourceId=$RemediationSourceId" } if ($RemediationSourceName) { $QueryParams += "remediationSourceName=$RemediationSourceName" } if ($StartTime) { $QueryParams += "startTimeMs=$(( [DateTimeOffset]$StartTime.ToUniversalTime() ).ToUnixTimeMilliseconds())" } if ($EndTime) { $QueryParams += "endTimeMs=$(( [DateTimeOffset]$EndTime.ToUniversalTime() ).ToUnixTimeMilliseconds())" } $AllResults = [System.Collections.Generic.List[object]]::new() $NextCursor = $null $NextRemediationCursor = $null $HasMore = $true while ($HasMore) { $PageQueryParams = @($QueryParams) if ($NextCursor) { $PageQueryParams += "cursor=$NextCursor" } if ($NextRemediationCursor) { $PageQueryParams += "remediationCursor=$NextRemediationCursor" } $QueryString = '?' + ($PageQueryParams -join '&') $Headers = New-LMHeader -Auth $Script:LMAuth -Method "GET" -ResourcePath $ResourcePath $Uri = "https://$($Script:LMAuth.Portal).$(Get-LMPortalURI)" + $ResourcePath + $QueryString Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $CommandInvocation $Response = Invoke-LMRestMethod -CallerPSCmdlet $CallerPSCmdlet -Uri $Uri -Method "GET" -Headers $Headers[0] -WebSession $Headers[1] if ($null -eq $Response) { break } if ($Response.items) { foreach ($item in @($Response.items)) { $AllResults.Add($item) } } $NextCursor = $Response.cursor $NextRemediationCursor = $Response.remediationCursor $HasMore = (-not [string]::IsNullOrWhiteSpace([string]$NextCursor)) -or (-not [string]::IsNullOrWhiteSpace([string]$NextRemediationCursor)) if (-not $Response.items -or @($Response.items).Count -eq 0) { if ([string]::IsNullOrWhiteSpace([string]$NextCursor) -and [string]::IsNullOrWhiteSpace([string]$NextRemediationCursor)) { break } } } if ($AllResults.Count -eq 0) { return } return (Add-ObjectTypeInfo -InputObject $AllResults -TypeName "LogicMonitor.DiagnosticRemediationExecutionResult") } |