Public/Invoke-LMRemediationSource.ps1
|
<# .SYNOPSIS Triggers a remediation source execution for a host. .DESCRIPTION The Invoke-LMRemediationSource function manually triggers a remediation source execution for a LogicMonitor host. The host can be identified by ID, name, or display name, and the remediation source can be identified by ID or name. .PARAMETER Id The host ID to run the remediation source against. Alias: HostId. .PARAMETER Name The host name to run the remediation source against. Alias: HostName. .PARAMETER DisplayName The host display name to run the remediation source against. .PARAMETER RemediationId The remediation source ID to execute. .PARAMETER RemediationName The remediation source name to execute. .PARAMETER AlertId Optional alert ID associated with this remediation execution. .EXAMPLE Invoke-LMRemediationSource -Id 123 -RemediationId 456 Triggers remediation source ID 456 on host ID 123. .EXAMPLE Invoke-LMRemediationSource -HostName "server01" -RemediationName "Restart Agent" -AlertId "A123456" Looks up host and remediation source by name, then triggers a remediation execution associated with alert A123456. .NOTES You must run Connect-LMAccount before running this command. .INPUTS None. You cannot pipe objects to this command. .OUTPUTS Returns LogicMonitor.RemediationSourceExecution object. #> function Invoke-LMRemediationSource { [CmdletBinding(DefaultParameterSetName = 'Id-remediationId')] param ( [Parameter(Mandatory, ParameterSetName = 'Id-remediationId', ValueFromPipelineByPropertyName)] [Parameter(Mandatory, ParameterSetName = 'Id-remediationName', ValueFromPipelineByPropertyName)] [Alias('HostId', 'DeviceId')] [Int]$Id, [Parameter(Mandatory, ParameterSetName = 'Name-remediationId')] [Parameter(Mandatory, ParameterSetName = 'Name-remediationName')] [Alias('HostName', 'DeviceName')] [String]$Name, [Parameter(Mandatory, ParameterSetName = 'DisplayName-remediationId')] [Parameter(Mandatory, ParameterSetName = 'DisplayName-remediationName')] [Alias('HostDisplayName', 'DeviceDisplayName')] [String]$DisplayName, [Parameter(Mandatory, ParameterSetName = 'Id-remediationId')] [Parameter(Mandatory, ParameterSetName = 'Name-remediationId')] [Parameter(Mandatory, ParameterSetName = 'DisplayName-remediationId')] [Int]$RemediationId, [Parameter(Mandatory, ParameterSetName = 'Id-remediationName')] [Parameter(Mandatory, ParameterSetName = 'Name-remediationName')] [Parameter(Mandatory, ParameterSetName = 'DisplayName-remediationName')] [String]$RemediationName, [String]$AlertId ) 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 } $HostId = $null $ResolvedRemediationId = $null switch -Wildcard ($PSCmdlet.ParameterSetName) { 'Id-*' { $HostId = $Id } 'Name-*' { $HostLookupResult = (Get-LMDevice -Name $Name).Id if (Test-LookupResult -Result $HostLookupResult -LookupString $Name) { return } $HostId = $HostLookupResult } 'DisplayName-*' { $HostLookupResult = (Get-LMDevice -DisplayName $DisplayName).Id if (Test-LookupResult -Result $HostLookupResult -LookupString $DisplayName) { return } $HostId = $HostLookupResult } } if ($PSCmdlet.ParameterSetName -like '*-remediationId') { $ResolvedRemediationId = $RemediationId } else { $RemediationLookupResult = (Get-LMRemediationSource -Name $RemediationName).Id if (Test-LookupResult -Result $RemediationLookupResult -LookupString $RemediationName) { return } $ResolvedRemediationId = $RemediationLookupResult } $ResourcePath = "/setting/remediationsources/executemanually" $Data = @{ remediationId = $ResolvedRemediationId hostId = $HostId alertId = $AlertId } $Body = Format-LMData -Data $Data -UserSpecifiedKeys $PSBoundParameters.Keys $Headers = New-LMHeader -Auth $Script:LMAuth -Method "POST" -ResourcePath $ResourcePath -Data $Body $Uri = "https://$($Script:LMAuth.Portal).$(Get-LMPortalURI)" + $ResourcePath Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Body $Response = Invoke-LMRestMethod -CallerPSCmdlet $PSCmdlet -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Body return (Add-ObjectTypeInfo -InputObject $Response -TypeName 'LogicMonitor.RemediationSourceExecution') } |