public/New-SwSdTask.ps1
function New-SwSdTask { <# .SYNOPSIS Creates a new task for the specified incident number. .DESCRIPTION Creates a new task for the specified incident number. The task is assigned to the specified user and can have a due date and completion status. Use the -IsComplete parameter to set the task as complete. .PARAMETER IncidentNumber The incident number. .PARAMETER Name The task name or description. .PARAMETER Assignee The task assignee email address. Must be a valid Service Desk user or group. .PARAMETER IsComplete The task completion status. True indicates a completed task. The default is False. .PARAMETER DueDate The due date for the task. Default is no due date. .EXAMPLE New-SwSdTask -IncidentNumber "12345" -Name "Task Name" -Assignee "user123@contoso.com" Add a task for "Task Name" assigned to user "user123@contoso.com" with no due date. .EXAMPLE New-SwSdTask -IncidentNumber "12345" -Name "Task Name" -Assignee "user123@contoso.com" -DueDate "2025-12-31" Add a task for "Task Name" assigned to user "user123@contoso.com" with a due date of "2025-12-31". .EXAMPLE New-SwSdTask -IncidentNumber "12345" -Name "Task Name" -Assignee "user123@contoso.com" -IsComplete $True Add a task for "Task Name" assigned to user "user123@contoso.com" with a completion status of $True. .NOTES Refer to https://apidoc.samanage.com/#tag/Task/operation/createTask .LINK https://github.com/Skatterbrainz/SolarWinds.ServiceDesk/blob/main/docs/New-SwSdTask.md #> [CmdletBinding()] param( [parameter(Mandatory = $True)][string][ValidateNotNullOrWhiteSpace()]$IncidentNumber, [parameter(Mandatory = $True)][string][ValidateNotNullOrWhiteSpace()]$Name, [parameter(Mandatory = $True)][string][ValidateNotNullOrWhiteSpace()]$Assignee, [parameter(Mandatory = $False)][boolean]$IsComplete = $False, [parameter(Mandatory = $False)][datetime]$DueDate ) try { $incident = Get-SwSdIncident -Number $IncidentNumber if (!$incident) { throw "Incident $IncidentNumber not found." } $url = getApiBaseURL -ApiName "Helpdesk Incidents List" -NoExtension $url = "$url/$($incident.id)/tasks" Write-Verbose "Tasks URL: $url" Write-Verbose "Verifying User $Assignee" $user = Get-SwSdUser -Email $Assignee if (!$user) { throw "User $Assignee not found." } if (![string]::IsNullOrEmpty($DueDate)) { $dueDate = (Get-Date $DueDate).ToString("MMM dd, yyyy") Write-Verbose "Due Date: $dueDate" $body = @{ "task" = @{ "name" = $Name.Trim() "assignee" = @{ "email" = $Assignee.Trim() } "due_at" = $dueDate "is_complete" = $IsComplete } } | ConvertTo-Json } else { $body = @{ "task" = @{ "name" = $Name.Trim() "assignee" = @{ "email" = $Assignee.Trim() } "is_complete" = $IsComplete } } | ConvertTo-Json } Write-Verbose "Creating task: $json" #curl -H "X-Samanage-Authorization: Bearer $token" -H "Accept: application/vnd.samanage.v2.1+json" -H "Content-Type: application/json" -X POST $url -d $json $response = Invoke-RestMethod -Method POST -Uri $url -ContentType "application/json" -Headers $Session.headers -Body $body #-ErrorAction Stop $response } catch { if ($_.Exception.Message -notmatch '406') { Write-Error $_.Exception.Message } } } |