Public/Jobs/Get-RMMJob.ps1
|
<#
Copyright (c) 2025-2026 Robert Faddes SPDX-License-Identifier: MPL-2.0 #> function Get-RMMJob { <# .SYNOPSIS Retrieves job information from the Datto RMM API by JobUid or from an ActivityLog object. .DESCRIPTION Retrieves information about jobs (component executions) in the Datto RMM system. You can specify a JobUid directly, or pipe ActivityLog objects (from Get-RMMActivityLog) to retrieve job details for each log entry. When piping ActivityLog objects, the -UseExperimentalDetailClasses switch must be used with Get-RMMActivityLog to provide the required detail type. Non-job activity logs are safely skipped with a warning. This function supports retrieving jobs for actions such as Deployment (execution), Create (new job), and Generic (unknown action). .PARAMETER JobUid The unique identifier (GUID) of the job to retrieve. .PARAMETER ActivityLog An activity log object (from Get-RMMActivityLog -UseExperimentalDetailClasses) containing job details. Can be piped to this function. Non-job activity logs are skipped with a warning. .EXAMPLE Get-RMMJob -JobUid "12067610-8504-48e3-b5de-60e48416aaad" Retrieves basic information about a specific job by its unique identifier. .EXAMPLE Get-RMMActivityLog -Entity Device -UseExperimentalDetailClasses | Get-RMMJob Retrieves job details for all job-related activity logs for devices. The -UseExperimentalDetailClasses switch is required to provide the correct detail type for piping. .EXAMPLE Get-RMMActivityLog -Entity Device -Category Job -UseExperimentalDetailClasses | Where-Object { $_.Details.JobName -eq 'Patch Critical Servers' } | Get-RMMJob Retrieves job details for all jobs named 'Patch Critical Servers' from device activity logs. .INPUTS System.Guid, DRMMActivityLog. You can pipe ActivityLog objects to this function. .OUTPUTS DRMMJob. Returns job objects with status, timestamps, and execution details. .NOTES This function requires an active connection to the Datto RMM API. Use Connect-DattoRMM to authenticate before calling this function. For details on -UseExperimentalDetailClasses, see Get-RMMActivityLog help. .LINK https://github.com/TheShadowTek/DattoRMM.Core/blob/main/docs/commands/Jobs/Get-RMMJob.md .LINK about_DRMMJob .LINK Get-RMMActivityLog .LINK New-RMMQuickJob .LINK Get-RMMJobResult #> [CmdletBinding(DefaultParameterSetName = 'JobUid')] param ( [Parameter( ParameterSetName = 'JobUid', Mandatory = $true )] [guid] $JobUid, [Parameter( ParameterSetName = 'ActivityLog', Mandatory = $true, ValueFromPipeline = $true )] [DRMMActivityLog] $ActivityLog ) begin { Write-Debug "Initializing Get-RMMJobV2 with parameter set: $($PSCmdlet.ParameterSetName)" } process { switch ($PSCmdlet.ParameterSetName) { 'ActivityLog' { if ($ActivityLog.Details -isnot [DRMMActivityLogDetailsDeviceJob]) { Write-Warning "The provided ActivityLog object is not of type DRMMActivityLogDetailsDeviceJob. Only job activity logs are supported." return } else { $APIPath = "job/$($ActivityLog.Details.JobUid)" } } 'JobUid' { $APIPath = "job/$JobUid" } } $APIMethod = @{ Path = $APIPath Method = 'Get' } Invoke-ApiMethod @APIMethod | ForEach-Object {[DRMMJob]::FromAPIMethod($_)} } } # SIG # Begin signature block # MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDJqv42NGGJ627f # Ix25NuFjpSlPDJvVcvAbX4whItdqiKCCA04wggNKMIICMqADAgECAhB464iXHfI6 # gksEkDDTyrNsMA0GCSqGSIb3DQEBCwUAMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRk # ZXMxIzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nMB4XDTI2MDMz # MTAwMTMzMFoXDTI4MDMzMTAwMjMzMFowPTEWMBQGA1UECgwNUm9iZXJ0IEZhZGRl # czEjMCEGA1UEAwwaRGF0dG9STU0uQ29yZSBDb2RlIFNpZ25pbmcwggEiMA0GCSqG # SIb3DQEBAQUAA4IBDwAwggEKAoIBAQChn1EpMYQgl1RgWzQj2+wp2mvdfb3UsaBS # nxEVGoQ0gj96tJ2MHAF7zsITdUjwaflKS1vE6wAlOg5EI1V79tJCMxzM0bFpOdR1 # L5F2HE/ovIAKNkHxFUF5qWU8vVeAsOViFQ4yhHpzLen0WLF6vhmc9eH23dLQy5fy # tELZQEc2WbQFa4HMAitP/P9kHAu6CUx5s4woLIOyyR06jkr3l9vk0sxcbCxx7+dF # RrsSLyPYPH+bUAB8+a0hs+6qCeteBuUfLvGzpMhpzKAsY82WZ3Rd9X38i32dYj+y # dYx+nx+UEMDLjDJrZgnVa8as4RojqVLcEns5yb/XTjLxDc58VatdAgMBAAGjRjBE # MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU # H+B0vf97dYXqdUX1YMcWhFsY6fcwDQYJKoZIhvcNAQELBQADggEBAJmD4EEGNmcD # 1JtFoRGxuLJaTHxDwBsjqcRQRE1VPZNGaiwIm8oSQdHVjQg0oIyK7SEb02cs6n6Y # NZbwf7B7WZJ4aKYbcoLug1k1x9SoqwBmfElECeJTKXf6dkRRNmrAodpGCixR4wMH # KXqwqP5F+5j7bdnQPiIVXuMesxc4tktz362ysph1bqKjDQSCBpwi0glEIH7bv5Ms # Ey9Gl3fe+vYC5W06d2LYVebEfm9+7766hsOgpdDVgdtnN+e6uwIJjG/6PTG6TMDP # y+pr5K6LyUVYJYcWWUTZRBqqwBHiLGekPbxrjEVfxUY32Pq4QfLzUH5hhUCAk4HN # XpF9pOzFLMUxggIDMIIB/wIBATBRMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRkZXMx # IzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nAhB464iXHfI6gksE # kDDTyrNsMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC # gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG # CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIJT/050HBKIsTlsBWaS2TYvzQ2VI # HqbhYiG5519BSH8rMA0GCSqGSIb3DQEBAQUABIIBAFpVINDe5lcIgLuglDuJTPro # MZWx19vRtVH1fMyfo3QYZSLJxavXmw0cE+BelXmBftzLzqc0MmHd8sW3NsAdwstw # AhT4eIKNldsmQpceOcnhv1pCD1wCm1+Q/OBzHummEYI9bYiEKtLVG5E79xC4dmn6 # xJEGlUgW2gSG+9BRD4Or0qK9Jyx3qIga4pMeq4xGjXormcrER5iSfxfKd519Hi+v # ZRqyccpMeifxd3CHqRD8wald5z5u3EfLuQLjNSTJIsbxB625YapQ3sdzDppY7pfd # CHYKGJ2B4Rc+0yp9NO/Wp66GKN8BZex5D70Y4ze5krvNtxC671ee1bK1tQvjU3Y= # SIG # End signature block |