Public/New-SDPChange.ps1
|
function New-SDPChange { <# .SYNOPSIS Creates a new change in ServiceDesk Plus. .PARAMETER Title The title of the change. .PARAMETER Description Detailed description of the change. .PARAMETER ChangeTypeName Name of the change type (e.g. 'Normal', 'Emergency', 'Standard'). .PARAMETER StatusName Name of the status to set. .PARAMETER PriorityName Name of the priority. .PARAMETER UrgencyName Name of the urgency level. .PARAMETER ImpactName Name of the impact level. .PARAMETER RiskName Name of the risk level. .PARAMETER ReasonName Name of the reason for change. .PARAMETER RequesterName Name of the requester. .PARAMETER TechnicianName Name of the technician to assign. .PARAMETER GroupName Name of the group to assign. .PARAMETER SiteName Name of the site. .PARAMETER DepartmentName Name of the department. .PARAMETER CategoryName Name of the category. .PARAMETER SubcategoryName Name of the subcategory. .PARAMETER ScheduledStartTime Planned start date/time. .PARAMETER ScheduledEndTime Planned end date/time. .PARAMETER AdditionalFields Hashtable of additional fields to include in the request body (e.g. UDF fields). .EXAMPLE New-SDPChange -Title 'Upgrade database server' .EXAMPLE New-SDPChange -Title 'Patch management rollout' -ChangeTypeName 'Normal' -PriorityName 'High' -TechnicianName 'Bob Jones' #> [CmdletBinding(SupportsShouldProcess)] [OutputType('SDPChange')] param( [Parameter(Mandatory)] [string]$Title, [Parameter()] [string]$Description, [Parameter()] [string]$ChangeTypeName, [Parameter()] [string]$StatusName, [Parameter()] [string]$PriorityName, [Parameter()] [string]$UrgencyName, [Parameter()] [string]$ImpactName, [Parameter()] [string]$RiskName, [Parameter()] [string]$ReasonName, [Parameter()] [string]$RequesterName, [Parameter()] [string]$TechnicianName, [Parameter()] [string]$GroupName, [Parameter()] [string]$SiteName, [Parameter()] [string]$DepartmentName, [Parameter()] [string]$CategoryName, [Parameter()] [string]$SubcategoryName, [Parameter()] [datetime]$ScheduledStartTime, [Parameter()] [datetime]$ScheduledEndTime, [Parameter()] [hashtable]$AdditionalFields ) $body = @{ title = $Title } if ($PSBoundParameters.ContainsKey('Description')) { $body['description'] = $Description } if ($PSBoundParameters.ContainsKey('ChangeTypeName')) { $body['change_type'] = @{ name = $ChangeTypeName } } if ($PSBoundParameters.ContainsKey('StatusName')) { $body['status'] = @{ name = $StatusName } } if ($PSBoundParameters.ContainsKey('PriorityName')) { $body['priority'] = @{ name = $PriorityName } } if ($PSBoundParameters.ContainsKey('UrgencyName')) { $body['urgency'] = @{ name = $UrgencyName } } if ($PSBoundParameters.ContainsKey('ImpactName')) { $body['impact'] = @{ name = $ImpactName } } if ($PSBoundParameters.ContainsKey('RiskName')) { $body['risk'] = @{ name = $RiskName } } if ($PSBoundParameters.ContainsKey('ReasonName')) { $body['reason'] = @{ name = $ReasonName } } if ($PSBoundParameters.ContainsKey('RequesterName')) { $body['requester'] = @{ name = $RequesterName } } if ($PSBoundParameters.ContainsKey('TechnicianName')) { $body['technician'] = @{ name = $TechnicianName } } if ($PSBoundParameters.ContainsKey('GroupName')) { $body['group'] = @{ name = $GroupName } } if ($PSBoundParameters.ContainsKey('SiteName')) { $body['site'] = @{ name = $SiteName } } if ($PSBoundParameters.ContainsKey('DepartmentName')) { $body['department'] = @{ name = $DepartmentName } } if ($PSBoundParameters.ContainsKey('CategoryName')) { $body['category'] = @{ name = $CategoryName } } if ($PSBoundParameters.ContainsKey('SubcategoryName')) { $body['subcategory'] = @{ name = $SubcategoryName } } if ($PSBoundParameters.ContainsKey('ScheduledStartTime')) { $body['scheduled_start_time'] = @{ value = [DateTimeOffset]::new($ScheduledStartTime).ToUnixTimeMilliseconds() } } if ($PSBoundParameters.ContainsKey('ScheduledEndTime')) { $body['scheduled_end_time'] = @{ value = [DateTimeOffset]::new($ScheduledEndTime).ToUnixTimeMilliseconds() } } if ($AdditionalFields) { foreach ($key in $AdditionalFields.Keys) { $body[$key] = $AdditionalFields[$key] } } if ($PSCmdlet.ShouldProcess($Title, 'Create SDP Change')) { $response = Invoke-SDPRestMethod -Endpoint 'changes' -Method POST -Body @{ change = $body } [SDPChange]::new($response.change) } } |