peterwishart
New Contributor III

Answering my own question - I was using the wrong tool for the job. Using the "Permissions" API rather than the "Jobs" API is what was needed. The below powershell code does what i need:

#get existing owner 
$current_perms_URL = "$BaseUrl/api/2.0/permissions/jobs/$JobId"
$perms_details = Invoke-RestMethod $current_perms_URL -Method GET -Headers $headers
$current_owner = ($perms_details.access_control_list | where { $_.all_permissions.permission_level -eq "IS_OWNER" }).user_name
Write-Output "Current Owner is $current_owner"
 
#downgrade current owner perms to CAN_MANAGE and add/update desired owner. All other users left untouched
if ($current_owner -ne $desired_owner){
  Write-Output "Updating owner to $desired_owner for JobId $JobId"
  $bodyContent = '{ "access_control_list": [ { "user_name": ' + """$current_owner""" + ', "permission_level": "CAN_MANAGE" }, { "user_name": ' + """$desired_owner""" + ', "permission_level": "IS_OWNER" } ] }'
  $bodyContent
 
  $perms_url = "$BaseUrl/api/2.0/permissions/jobs/$JobId"
  $perms_url
 
  Invoke-RestMethod $perms_url -Method PATCH -Headers $headers -Body $bodyContent
} else {
  Write-Output "Owner already set to $desired_owner for JobId $JobId. No action taken"
}

View solution in original post