[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ServiceLocation = "http://localhost/api/v1" $authHeader = "Bearer 265fa20a-ba69-47a0-aab5-034fba50e062:fzMQKFhuOb63ydsOFmJJtExe6mttWFSr" $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add('Authorization', $authHeader) $response = $null $response = Invoke-RestMethod "$ServiceLocation/scheduler/userSettings" -headers $headers -Method Get -ContentType "application/json" Write-Host "Querying the user settings endpoint returned $response" function Get-Rampiva-Object { param( [Parameter(Mandatory=$true)] [string] $Name, [Parameter(Mandatory=$true)] [string] $Endpoint ) $response = $null $response = Invoke-RestMethod "$ServiceLocation/$Endpoint" -headers $headers -Method Get -ContentType "application/json" if ($response -eq $null) { Write-Error Querying endpoint $Endpoint failed } Write-Host "Endpoint $Endpoint returned $($response.Length) objects(s)" Foreach ($item in $response) { if ($item.name -eq $Name) { return $item } } Write-Error "Could not find $Name using $Endpoint" Exit } $ResourcePoolName = "Pool A" $ExecutionProfileName = "Default Profile" $ClientName = "Citrus Foods" $MatterName = "Project Grapefruit" $LibraryName = "Sample Library" $WorkflowName = "Sample eDiscovery Processing" # Get resources IDs $ResourcePool = Get-Rampiva-Object -Endpoint "scheduler/resources/resourcePools" -Name $ResourcePoolName Write-Host Resource Pool $ResourcePool.name has ID $ResourcePool.id $ExecutionProfile = Get-Rampiva-Object -Endpoint "scheduler/resources/executionProfiles" -Name $ExecutionProfileName Write-Host Execution Profile $ExecutionProfile.name has ID $ExecutionProfile.id $Client = Get-Rampiva-Object -Endpoint "scheduler/client" -Name $ClientName Write-Host Client $Client.name has ID $Client.id $Matter = Get-Rampiva-Object -Endpoint "scheduler/client/$($Client.id)/matters" -Name $MatterName Write-Host Matter $Matter.name has ID $Matter.id $Library = Get-Rampiva-Object -Endpoint "scheduler/library" -Name $LibraryName Write-Host Library $Library.name has ID $Library.id $Workflow = Get-Rampiva-Object -Endpoint "scheduler/library/$($Library.id)/workflows" -Name $WorkflowName Write-Host Workflow $Workflow.name has ID $Workflow.id $workflowParameters= $null $workflowParameters = Invoke-RestMethod "$ServiceLocation/scheduler/library/workflow/$($Workflow.id)/requiredSessionParameters" -headers $headers -Method Get -ContentType "application/json" Write-Host Workflow $Workflow.name has $workflowParameters.Length required parameters: Foreach ($workflowParameter in $workflowParameters){ Write-Host `t $workflowParameter.name } # Prepare job submission $JobName = "Sample Job from Powershell" $sessionParameters = @( @{ name="{nuix_case_location}" value="Case PS1" } @{ name="{source_data_location}" value="Various Files" } @{ name="{docid_prefix}" value="PS" } ) $jobSubmission = @{ name = $JobName executionProfileId = $ExecutionProfile.id resourcePoolId = $ResourcePool.id libraryWorkflowId = $Workflow.id matterId = $Matter.id priority = "MEDIUM" sessionParameters = $sessionParameters } $json = $jobSubmission | ConvertTo-Json Write-Host `nJob Submission:`n$json # Submit job $json = $jobSubmission | ConvertTo-Json Write-Host `nJob Submission:`n$json # Submit job $jobSubmitted= $null $jobSubmitted= Invoke-RestMethod "$ServiceLocation/scheduler/jobs" -headers $headers -Method Post -Body $json -ContentType "application/json" Write-Host Job $JobName submitted with ID $jobSubmitted.id # Monitor job progress $endedStates = ("FINISHED","ERROR","STOPPED","CANCELLED") $executionState=$null while(-not $endedStates.contains($executionState)){ $jobDetails= $null $jobDetails= Invoke-RestMethod "$ServiceLocation/scheduler/jobs/$($jobSubmitted.id)/details" -headers $headers -Method Get -ContentType "application/json" $currentDate = Get-Date -Format "MM/dd/yyyy HH:mm:ss" $executionState = $jobDetails.settings.executionState Write-Host $currentDate $JobName status: $jobDetails.settings.executionState percentage complete: $jobDetails.settings.percentageComplete% Start-Sleep -Seconds 1 } # Write job log Write-Host $jobDetails.executionLog