UGDSBTopdeskPS.psm1
#Region '.\Public\Add-TopdeskIncidentTimespent.ps1' 0 function Add-TopdeskIncidentTimespent{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][string][ValidateNotNullOrEmpty()]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][string][ValidateNotNullOrEmpty()]$number, [Parameter()][int]$timeSpent = 0, [Parameter()][string]$notes, [Parameter()][datetime]$entryDate = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"), [Parameter()][string]$operator, [Parameter()][string]$operatorGroup, [Parameter()][string]$reason ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/timespent" } elseif ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/timespent" } $body = @{ timeSpent = $timeSpent notes = $notes entryDate = $entryDate } if ($PSBoundParameters.ContainsKey("operator")) { $body.Add("operator",@{id = $operator}) } if ($PSBoundParameters.ContainsKey("operatorGroup")) { $body.Add("operatorGroup",@{id = $operatorGroup}) } if ($PSBoundParameters.ContainsKey("reason")) { $body.Add("reason",@{id = $reason}) } try{ $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference | Out-Null } catch{ throw $_ } return $results.Results } #EndRegion '.\Public\Add-TopdeskIncidentTimespent.ps1' 41 #Region '.\Public\Add-TopdeskKnowledgeItemBranchesLink.ps1' 0 function Add-TopdeskKnowledgeItemBranchesLink{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$branchid ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/branches/link" $body = @{ "id" = $branchid } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Add-TopdeskKnowledgeItemBranchesLink.ps1' 20 #Region '.\Public\Add-TopdeskKnowledgeItemFeedback.ps1' 0 function Add-TopdeskKnowledgeItemFeedback{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()][switch]$questionAnswered, [Parameter()][ValidateNotNullOrEmpty()][string]$feedbackText ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/giveFeedback" $body = @{ questionAnswered = $questionAnswered.IsPresent feedbackText = $feedbackText } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Add-TopdeskKnowledgeItemFeedback.ps1' 21 #Region '.\Public\Get-TopdeskAPIResponse.ps1' 0 function Get-TopdeskAPIResponse { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][string]$endpoint, [Parameter()][Hashtable]$headers = $global:topdeskHeader, [Parameter()][ValidateNotNullOrEmpty()][string]$downloadFile, [Parameter()][ValidateSet("Get", "Post", "Patch", "Delete", "Put")][string]$Method = "Get", [Parameter()][ValidateNotNullOrEmpty()]$body, [Parameter()][ValidateNotNullOrEmpty()]$form, [Parameter()][switch]$AllowInsecureRedirect, [Parameter()][ValidateNotNullOrEmpty()][string]$filePath ) $uri = "$($global:topdeskAPIEndpoint)$($endpoint)" try { $vars = @{ Method = $Method Uri = $Uri Headers = $headers StatusCodeVariable = 'statusCode' AllowInsecureRedirect = $AllowInsecureRedirect.IsPresent } if ($PSBoundParameters.ContainsKey("filePath")) { $vars.Add("infile", $filePath) } if ($PSBoundParameters.ContainsKey("downloadFile")) { $vars.Add("OutFile", $downloadFile) } if ($PSBoundParameters.ContainsKey("Body")) { $vars.Add("Body", $body) } if ($PSBoundParameters.ContainsKey("form")) { $vars.Add("form", $form) } Write-Verbose "Calling API endpoint: $($uri)" $results = Invoke-RestMethod @Vars } catch { $ErrorMsg = $GLOBAL:error[0] $terminatingError = $true switch ($ErrorMsg.Exception.StatusCode) { "Unauthorized" { $ErrorResponse = "Unauthorized. Please check your credentials" } "NotFound" { $ErrorResponse = "Endpoint not found. Please check the endpoint" } "Conflict" { $terminatingError = $false throw "Conflict" } "BadRequest" { $InnerError = ($ErrorMsg | ConvertFrom-JSON).errors switch ($InnerError.errorCode) { "item_visibility_invalid" { $terminatingError = $false Write-Error "Child can not be less permissive then parent" } default { $terminatingError = $true throw $InnerError } } } default { $ErrorResponse = "Unknown Error. $($ErrorMsg.Exception.Message)" } } if ($terminatingError) { $ErrorResponse = "$($ErrorResponse) - Line: $($ErrorMsg.InvocationInfo.ScriptLineNumber). Script: $($ErrorMsg.InvocationInfo.ScriptName). Command: $($ErrorMsg.InvocationInfo.Line). Error Details: $($ErrorMsg.ErrorDetails.Message)" throw $ErrorResponse } } return [PSCustomObject]@{ StatusCode = $statusCode Results = $results } } #EndRegion '.\Public\Get-TopdeskAPIResponse.ps1' 79 #Region '.\Public\Get-TopdeskArchivingReasons.ps1' 0 function Get-TopdeskArchivingReasons{ [CmdletBinding()] param( ) $endpoint = "/tas/api/archiving-reasons" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskArchivingReasons.ps1' 21 #Region '.\Public\Get-TopdeskAsset.ps1' 0 <# .DESCRIPTION This will query and return all the assets from the topdesk platform. .PARAMETER nameFragment Filters assets by checking whether their name contains this search term. Matching is case insensitive. Special and whitespace characters are supported without the need to escape them. An empty value matches all assets. .PARAMETER searchTerm To filter assets by their name-fragment or any fragment in their text or number type fields. It's case-insensitive .PARAMETER templateId To filter assets by a specific template. Since each asset type uses only one template, this filtering is the same as filtering by asset types .PARAMETER templateName To filter assets by a specific template's name (case sensitive) .PARAMETER includeTemplates Whether to include template information in the response. It can be one of the following: none (default if omitted), relevant (works only if linkedTo is present), all. .PARAMETER archived Whether to show archived assets. Leave out for all, or specify true/false for only archived, or only active assets, respectively. .PARAMETER fields Specifies the set of returned asset fields and auxiliary asset information. Field names are to be provided as a comma-separated list of the same query parameter. The specified pieces of information are returned inside the 'dataSet' array. Additional meta-data about the requested fields (like their type and display name) is returned in the 'columns' array of the response. Possible values are the following: The ID of any user-defined field can be used. Standard asset properties: 'name', 'modificationDate', 'creationDate'. '@type': Template name and icon name of the asset. '@@summary': a user-defined description of the asset which is built by concatenating field values. '@assignments': Information about assignments (person / person group / location / branch links) of the particular asset. '@linkToTemplateCount': This field can only be used together with 'linkedToTemplate', 'linkedToTemplateWithDirection', and optionally with 'linkedToTemplateWithCapability' query parameters. When this special field is given, the response will contain the count of assets of the specified template which are linked to the given asset with the specified direction and capability. If 'linkedToTemplateWithCapability' isn't given, the unqualified parent-child relationship is assumed. (For example, this feature can be used to query how many assets of a certain asset type are in each stock.) .PARAMETER showAssignments When it's given it returns more meta information, including all person and location related assignments. See '/assignments' endpoint documentation for more details about the response format. .PARAMETER linkedTo Entity type and ID of the entity the assets are linked to, separated by a slash character. Accepted types: assignable types (person, personGroup, branch, location) and external link types (incident, changeActivity, knowledge, change, problem, omActivity, omSeries, service). Example: linkedTo=person/4878f620-e404-4f2d-9d53-622a1693d467. Instead of an ID, wildcards can also be used with certain types. In that case, and only then, multiple type/value pairs are also accepted, which should be separated by a comma. Supported wildcards are: 'any' for any active or archived entities. Supported for the following types: person, personGroup, branch, location. 'anyArchived' for any archived entities. Supported for the following types: person, personGroup. Example: linkedTo=person/any,personGroup/anyArchived. This filters for assets that are linked to any person or linked to any archived person group. At most one type/value pair can be specified when the type is an external link type, and it cannot be combined with assignable types. .PARAMETER notLinkedTo Entity type and ID of the entity the assets are not linked to, separated by a slash character. Accepted types are the same as for linkedTo. Example: notLinkedTo=person/4878f620-e404-4f2d-9d53-622a1693d467. Instead of an ID, wildcards can also be used with certain types. In that case, and only then, multiple type/value pairs are also accepted, which should be separated by a comma. Supported wildcards are: 'any' for any active or archived entities. Supported for the following types: person, personGroup, branch, location. 'anyArchived' for any archived entities. Supported for the following types: person, personGroup. Example: notLinkedTo=person/any,personGroup/anyArchived. This filters for assets that are not linked to any person or not linked to any archived person group. At most one type/value pair can be specified when the type is an external link type, and it cannot be combined with assignable types. .PARAMETER filterInherited Used together with linkedTo or notLinkedTo parameters. Whether to filter assets by including inherited assignments. For example: Using filterInherited=false and linkedTo=person/4878f620-e404-4f2d-9d53-622a1693d467 lists all assets which have this person assigned directly, but skips assets where this person is assigned only by inheritance. Using filterInherited=true and linkedTo=person/4878f620-e404-4f2d-9d53-622a1693d467 lists all assets which have this person assigned, either directly or by inheritance. .PARAMETER assetStatus To filter assets by their status. Possible values: OPERATIONAL, IMPACTED. .PARAMETER filter Supports a limited set of simple OData filters. Specifying multiple filters is supported, but they can be separated only by the 'and' logical operator. Filtering based on the name field with greater-than operator. Example: $filter=name gt 'CAR0042'. Filtering based on the templateId field. Supported operators: eq, in, ne. Example: $filter=templateId eq 'fc886aa0-8315-4ff9-b7f9-ad79a01d5f5c' and templateId eq '3c5f3383-23d5-40bf-95f0-78b151c028ea'. Filtering based on date fields with greater-than, or less-than operator. Example: $filter=modificationDate gt '2017' and modificationDate lt '2017-05-26'. Dates are interpreted as UTC dates. Supported formats: yyyy (2017); yyyy-MM (2017-12); yyyy-MM-dd (2017-12-25); yyyy-MM-dd'T'HH:mm (2017-12-25T18:30); yyyy-MM-dd'T'HH:mm:ss (2017-12-25T18:30:12); yyyy-MM-dd'T'HH:mm:ss.SSS (2017-12-25T18:30:12.798). Filtering based on a linked entity. Example: $filter=linkedTo eq 'incident/2eebf650-c5d7-4bf3-ad05-1f4cbced3b06'. Filtering based on a text field. Use the 'contains' operator. Example: $filter=specification contains 'desk'. Filtering based on a checkbox field on false and true values. Example: $filter=termsandconditions eq 'false'. Filtering based on a number field. Examples: $filter=cost eq 15, $filter=cost ge 40. Filtering based on a dropdown field. Supported operators: eq, in, ne. Example: $filter=dropdown-field eq '2eebf650-c5d7-4bf3-ad05-1f4cbced3b06'. Filtering based on whether a text, number, dropdown or date field is empty or not empty. Missing values and empty strings are considered empty. Fields that do not exist for a given type are considered neither empty nor not empty. Examples: $filter=text-field isEmpty, $filter=text-field isNotEmpty. Filtering based on the id field with 'eq' or 'in' operator. Examples: $filter=id eq 'e08dcc19-8008-436e-82f1-c99b1cf9d727', $filter=id in ['e08dcc19-8008-436e-82f1-c99b1cf9d727','23c484cd-cdcf-48ae-a7bd-b655efb3c686']. .PARAMETER orderby OData like ordering on assets based on the value of a single field specified by this parameter. Secondary ordering is always performed by name. Sorting direction needs to be set to either asc or desc. Currently, sorting can be based on the following types of fields: text (including name and @@summary), date (including modificationDate and creationDate), number, boolean, and dropdown with own options. .PARAMETER lastSeenName Can be used for implementing seek-based paging. Skips assets whose name precedes or equals to the value of this parameter according to the sorting direction. Can be used together with lastSeenOrderbyValue and $orderby. If lastSeenOrderbyValue is not present, using this parameter leads to a bad request error. Note: Using this parameter is only supported when $orderby is set to either name, @@summary, modificationDate, or creationDate. .PARAMETER lastSeenOrderbyValue Can be used for implementing seek-based paging. Skips assets that have a preceding value for the field specified in $orderby compared to the value of this parameter. In case of value equality the value of lastSeenName determines whether to skip an asset or not. Can be used together with lastSeenName and $orderby. When sorting is based on the name only, the value of this parameter should be the same as the value of lastSeenName. If lastSeenName is not present, using this parameter leads to a bad request error .PARAMETER linkableToAsset Used together with linkableWithDirection and optionally with linkableWithCapability. To filter assets by checking if they can be linked to the asset specified by its unique ID. An asset cannot be linked to itself. The same link cannot be applied multiple times. If linkableWithDirection is not provided, using this parameter results in a 'Bad Request' error. If linkableWithCapability is not provided, resulting assets are linkable without a link type. .PARAMETER linkableWithDirection Used together with linkableToAsset and optionally with linkableWithCapability. To filter assets by direction. Possible values: SOURCE, TARGET. SOURCE: linkableToAsset can be the parent of results. TARGET: linkableToAsset can be the child of results. If linkableToAsset is not provided, using this parameter results in a 'Bad Request' error. If linkableWithCapability is not provided, resulting assets are linkable without a link type. .PARAMETER linkableWithCapability Used together with linkableWithDirection and linkableToAsset. To filter assets by a link type specified by its unique ID. If either linkableWithDirection or linkableToAsset is not provided, using this parameter results in a 'Bad Request' error. .PARAMETER linkedToAsset Used together with linkedWithDirection and optionally with linkedWithCapability. To filter assets by checking if they are linked to the asset specified by its unique ID. If linkedWithDirection is not provided, using this parameter results in a 'Bad Request' error. If linkedWithCapability is not provided, resulting assets are linked without a link type. In addition to a unique ID of an asset, the following values are also valid for the parameter: any: results in assets that are linked to any asset with the specified direction and link type. none: results in assets that are not linked to any asset with the specified direction and link type. .PARAMETER linkedWithDirection Used together with linkedToAsset and optionally with linkedWithCapability. To filter assets by direction. Possible values: SOURCE, TARGET. SOURCE: linkedToAsset can be the parent of results. TARGET: linkedToAsset can be the child of results. If linkedToAsset is not provided, using this parameter results in a 'Bad Request' error. If linkedWithCapability is not provided, resulting assets are linked without a link type. .PARAMETER linkedWithCapability Used together with linkedWithDirection and linkedToAsset. To filter assets by a link type specified by its unique ID. If either linkedWithDirection or linkedToAsset is not provided, using this parameter results in a 'Bad Request' error. .PARAMETER resourceCategory The endpoint returns assets matching the specified category only. .PARAMETER includeInherited Show inherited assignments of assets. .PARAMETER pageStart The number of assets to skip, or, in other words, the zero-based index of the asset to return as the first item of the requested page. In case the value is greater than or equal to the total number of retrieved assets the resulting list is empty. This parameter cannot be used together with either lastSeenName or lastSeenOrderbyValue, as they provide an alternative way of paging. .PARAMETER fetchData Whether to include assets in the response or not. .PARAMETER fetchCount Whether to include the asset count in the response or not. This parameter is especially useful if the number of assets is needed. With this solution, counting the assets on client side can be avoided, as the count is available in the count property of the response body. .PARAMETER resolveDropdownOptions Whether to turn the value of dropdown fields into an object that contains the display name of options next to their ID. This could be useful when you want to avoid making many additional requests for retrieving display names, which can be performed on a per dropdown option basis like this: GET /assets?templateId=<ID of the dropdown template>&id=<ID of the dropdown option>. The 'id' and 'name' properties of the object are present with null value when the corresponding asset has no value for a particular dropdown field. #> function Get-TopdeskAsset { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][string]$assetId, [Parameter()][switch]$defaultfields, [Parameter()][string]$fields = "", [Parameter()][string][ValidateNotNullOrEmpty()]$nameFragment, [Parameter()][string][ValidateNotNullOrEmpty()]$searchTerm, [Parameter()][string][ValidateNotNullOrEmpty()]$templateId, [Parameter()][string][ValidateNotNullOrEmpty()]$templateName, [Parameter()][bool][ValidateNotNullOrEmpty()]$archived, [Parameter()][switch]$showAssignments, [Parameter()][ValidateSet("OPERATIONAL", "IMPACTED")][string]$assetStatus, [Parameter()][string][ValidateNotNullOrEmpty()]$filter, [Parameter()][string][ValidateNotNullOrEmpty()]$orderbyname = "name", [Parameter()][ValidateSet("asc", "desc")][string][ValidateNotNullOrEmpty()]$orderbydirection = "asc", [Parameter()][string][ValidateNotNullOrEmpty()]$lastSeenName, [Parameter()][string][ValidateNotNullOrEmpty()]$lastSeenOrderbyValue, [Parameter()][ValidateSet("asset", "stock", "bulkItem")][string]$resourceCategory, [Parameter()][bool][ValidateNotNullOrEmpty()]$includeInherited, [Parameter()][int][ValidateNotNullOrEmpty()]$pageStart, [Parameter()][bool][ValidateNotNullOrEmpty()]$fetchData, [Parameter()][switch]$fetchCount, [Parameter()][switch]$resolveDropdownOptions, [Parameter()][ValidateSet("none", "relevant", "all")][string]$includeTemplates, [Parameter()][string][ValidateNotNullOrEmpty()]$linkedTo, [Parameter()][string][ValidateNotNullOrEmpty()]$notLinkedTo, [Parameter()][bool]$filterInherited, [Parameter()][string][ValidateNotNullOrEmpty()]$linkableToAsset, [Parameter()][string][ValidateNotNullOrEmpty()]$linkableWithDirection, [Parameter()][string][ValidateNotNullOrEmpty()]$linkableWithCapability, [Parameter()][string][ValidateNotNullOrEmpty()]$linkedToAsset, [Parameter()][string][ValidateNotNullOrEmpty()]$linkedWithDirection, [Parameter()][string][ValidateNotNullOrEmpty()]$linkedWithCapability, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/assetmgmt/assets" # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("assetId")) { $endpoint = "/tas/api/assetmgmt/assets/$($assetid)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If default fields are present, then ensure that we include those fields at a minimum if ($defaultfields.IsPresent) { $fields = "text,archived,id,name,$($fields)" } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # If name fragment is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("nameFragment")) { $uriparts.add("nameFragment=$($nameFragment)") } # If searchTerm is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("searchTerm")) { $uriparts.add("searchTerm=$($searchTerm)") } # If templateId is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("templateId")) { $uriparts.add("templateId=$($templateId)") } # If templateName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("templateName")) { $uriparts.add("templateName=$($templateName)") } # If archived is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("archived")) { $uriparts.add("archived=$($archived)") } # If showAssignments is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("showAssignments")) { $uriparts.add("showAssignments=$($showAssignments)") } # If assetStatus is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("assetStatus")) { $uriparts.add("assetStatus=$($assetStatus)") } # If filter is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("filter")) { $uriparts.add("`$filter=$($filter)") } # Order by $uriparts.add("`$orderby=$($orderbyname) $($orderbydirection)") # If lastSeenName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("lastSeenName")) { $uriparts.add("lastSeenName=$($lastSeenName)") } # If lastSeenName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("lastSeenOrderbyValue")) { $uriparts.add("lastSeenOrderbyValue=$($lastSeenOrderbyValue)") } # If lastSeenName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("resourceCategory")) { $uriparts.add("resourceCategory=$($resourceCategory)") } # If lastSeenName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("includeInherited")) { $uriparts.add("includeInherited=$($includeInherited)") } # If pageStart is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageStart")) { $uriparts.add("pageStart=$($pageStart)") } # If fetchData is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fetchData")) { $uriparts.add("fetchData=$($fetchData)") } # If fetchCount is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fetchCount")) { $uriparts.add("fetchCount=$($fetchCount)") } # If resolveDropdownOptions is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("resolveDropdownOptions")) { $uriparts.add("resolveDropdownOptions=$($resolveDropdownOptions)") } # If includeTemplates is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("includeTemplates")) { $uriparts.add("includeTemplates=$($includeTemplates)") } # If linkedTo is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkedTo")) { $uriparts.add("linkedTo=$($linkedTo)") } # If notLinkedTo is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("notLinkedTo")) { $uriparts.add("notLinkedTo=$($notLinkedTo)") } # If filterInherited is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("filterInherited")) { $uriparts.add("filterInherited=$($filterInherited)") } # If linkableToAsset is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkableToAsset")) { $uriparts.add("linkableToAsset=$($linkableToAsset)") } # If linkableWithDirection is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkableWithDirection")) { $uriparts.add("linkableWithDirection=$($linkableWithDirection)") } # If linkableWithCapability is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkableWithCapability")) { $uriparts.add("linkableWithCapability=$($filterInherited)") } # If linkedToAsset is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkedToAsset")) { $uriparts.add("linkedToAsset=$($linkedToAsset)") } # If linkedWithDirection is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkedWithDirection")) { $uriparts.add("linkedWithDirection=$($linkedWithDirection)") } # If linkedWithCapability is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("linkedWithCapability")) { $uriparts.add("linkedWithCapability=$($linkedWithCapability)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference if($results.results.dataSet.count -gt 0){ $process = $results.results.dataSet } else{ $process = $results.results } # Load results into an array foreach ($item in $process) { $data.Add($item) | Out-Null } Write-Verbose "Returned $($results.Results.dataSet.Count) results. Current result set is $($data.Count) items." $uri = "$($endpoint)&lastSeenName='$($data[$data.count - 1].Name)'&lastSeenOrderbyValue='$($data[$data.count - 1].Name)'" } while ($all.IsPresent -and $results.StatusCode -eq 206) if ($PSBoundParameters.ContainsKey("includeTemplates")) { $templates = [System.Collections.Generic.List[PSObject]]@() foreach ($item in $results.Results.templates) { $templates.Add($item) | Out-Null } } } catch { throw $_ } # return the data if ($PSBoundParameters.ContainsKey("includeTemplates")) { return [PSCustomObject]@{ data = $data templates = $templates } } else { return $data } } #EndRegion '.\Public\Get-TopdeskAsset.ps1' 260 #Region '.\Public\Get-TopdeskAssetActions.ps1' 0 function Get-TopdeskAssetActions{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$assetId ) $endpoint = "/tas/api/assetmgmt/assets/$($assetId)/actions" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.actions.count) results." # Load results into an array foreach($item in $results.Results.actions){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskAssetActions.ps1' 23 #Region '.\Public\Get-TopdeskAssetAssignments.ps1' 0 <# .DESCRIPTION .PARAMETER assetId The ID of the asset .PARAMETER includeInherited Include inherited assignments in the response. Inherited assignments do not have a linkId, but have an inheritanceParentId (the id of the asset it is inherited from). .PARAMETER limit The maximum number of assignments to return in one response. Must be a decimal number greater than 0.fs #> function Get-TopdeskAssetAssignments{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$assetId, [Parameter()][switch]$includeInherited, [Parameter()][ValidateNotNullOrEmpty()][string]$limit ) $endpoint = "/tas/api/assetmgmt/assets/$($assetId)/assignments" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If includeInherited is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("includeInherited")) { $uriparts.add("includeInherited=$($includeInherited.IsPresent)") } # If limit is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("limit")) { $uriparts.add("limit=$($limit)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $locations = [System.Collections.Generic.List[PSObject]]@() $persons = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results.locations){ $locations.add($item) | Out-Null } foreach($item in $results.Results.persons){ $persons.add($item) | Out-Null } } catch{ throw $_ } return [PSCustomObject]@{ Locations = $locations Persons = $persons } } #EndRegion '.\Public\Get-TopdeskAssetAssignments.ps1' 51 #Region '.\Public\Get-TopdeskAssetDropdown.ps1' 0 <# .DESCRIPTION .PARAMETER dropdownId The template ID or field key of the dropdown whose options to return. .PARAMETER includeArchived Whether to include archived dropdown options in the response. By default, only active dropdown options are returned. #> function Get-TopdeskAssetDropdown { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Alias("dropdownName")][Parameter(Mandatory = $true)][string]$dropdownId, [Parameter()][switch]$includeArchived ) # The endpoint to get assets $endpoint = "/tas/api/assetmgmt/dropdowns/$($dropdownId)?field=name&includeArchived=$($includeArchived.IsPresent)" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Results.count) results." # Load results into an array foreach($item in $results.Results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskAssetDropdown.ps1' 34 #Region '.\Public\Get-TopdeskAssetFieldDefinition.ps1' 0 <# .DESCRIPTION .PARAMETER fieldId Id of the field .PARAMETER resourceCategory If possible functionalities should be included into the response #> function Get-TopdeskAssetFieldDefinition{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][string][ValidateNotNullOrEmpty()]$fieldId, [Parameter()][switch]$includeFunctionalities ) $endpoint = "/tas/api/assetmgmt/fields/$($fieldId)" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If includeFunctionalities is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("includeFunctionalities")) { $uriparts.add("includeFunctionalities=$($includeFunctionalities)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskAssetFieldDefinition.ps1' 39 #Region '.\Public\Get-TopdeskAssetFields.ps1' 0 <# .DESCRIPTION .PARAMETER searchTerm Include fields only if their display name contains the given text fragment. .PARAMETER resourceCategory The endpoint returns assets matching the specified category only. #> function Get-TopdeskAssetFields{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][ValidateNotNullOrEmpty()][string]$searchTerm, [Parameter()][ValidateSet("asset", "stock", "bulkItem")][string]$resourceCategory ) $endpoint = "/tas/api/assetmgmt/fields" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If searchTerm is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("searchTerm")) { $uriparts.add("searchTerm=$($searchTerm)") } # If lastSeenName is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("resourceCategory")) { $uriparts.add("resourceCategory=$($resourceCategory)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.dataSet.Count) results." # Load results into an array foreach($item in $results.Results.dataSet){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskAssetFields.ps1' 41 #Region '.\Public\Get-TopdeskAssetTemplates.ps1' 0 <# .DESCRIPTION This will return the list of asset templates for the topdesk platform. .PARAMETER archived Whether to show archived templates. Leave out for all, or specify true/false for only archived, or only active templates, respectively. .PARAMETER includeNonReadable Whether to show templates for assets which the user doesn't have read permission for. If this parameter isn't specified the endpoint returns templates for assets which the user has read permission for. .PARAMETER resourceCategory The endpoint returns templates matching the specified category only. .PARAMETER searchTerm The endpoint returns those templates which contain the given searchTerm in their name. It's case insensitive. .EXAMPLE #> function Get-TopdeskAssetTemplates{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][bool]$archived, [Parameter()][bool]$includeNonReadable, [Parameter()][ValidateSet("asset","stock","bulkItem")][string]$resourceCategory, [Parameter()][string][ValidateNotNullOrEmpty()]$searchTerm ) # The endpoint to get assets $endpoint = "/tas/api/assetmgmt/templates" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If archived is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("archived")){ $uriparts.add("archived=$($archived)") } # If includeNonReadable is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("includeNonReadable")){ $uriparts.add("includeNonReadable=$($includeNonReadable)") } # If resourceCategory is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("resourceCategory")){ $uriparts.add("resourceCategory=$($resourceCategory)") } # If searchTerm is not null, then add to URI parts if($PSBoundParameters.ContainsKey("searchTerm")){ $uriparts.add("searchTerm=$($searchTerm)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.dataSet.Count) results." # Load results into an array foreach($item in $results.Results.dataSet){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskAssetTemplates.ps1' 61 #Region '.\Public\Get-TopdeskAssetUpload.ps1' 0 <# .DESCRIPTION This will get a list of all the attachments that are associated with an asset, if the downloadpath is passed, it will also download the files. .PARAMETER assetId The ID of the asset, which contains the files. This is required .PARAMETER downloadPath The folder where we will save the files. #> function Get-TopdeskAssetUpload { [CmdletBinding()] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$assetId, [Parameter()][ValidateNotNullOrEmpty()][string]$downloadPath ) # The endpoint to get assets $endpoint = "/tas/api/assetmgmt/uploads?assetId=$($assetid)" try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if ($PSBoundParameters.ContainsKey("downloadPath")) { foreach($file in $results.Results.dataset){ $weburl = "$($file.url -replace "/tas/api/")" $filename = Join-Path $downloadPath -ChildPath $file.name Get-TopdeskAPIResponse -endpoint $weburl -downloadFile $filename | Out-Null } } } catch { throw $_ } return $results.Results.dataset } #EndRegion '.\Public\Get-TopdeskAssetUpload.ps1' 32 #Region '.\Public\Get-TopdeskBranches.ps1' 0 function Get-TopdeskBranches{ [CmdletBinding()] param( [Parameter()][string]$fields, [Parameter()][string]$id, [Parameter()][string]$startsWith, [Parameter()][string]$query, [Parameter()][string]$clientReferenceNumber ) # The endpoint to get assets $endpoint = "/tas/api/branches" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # Create a list of the query parts that we would add the to the endpoint $queryparts = [System.Collections.Generic.List[PSCustomObject]]@() # If id is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("id")){ $endpoint = "$($endpoint)/id/$($id)" } # For backwards compat, allow to send specific query items that are common # If startswith is sent if($PSBoundParameters.ContainsKey("startsWith")){ $queryparts.add("name=sw=$($startsWith)") } # If clientReferenceNumber is sent if($PSBoundParameters.ContainsKey("clientReferenceNumber")){ $queryparts.add("clientReferenceNumber=sw=$($clientReferenceNumber)") } # If query is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("query") -or $queryparts.count -gt 0){ $queryparts.add($query) $query = ($queryparts -join ";") -replace ".{1}$" $uriparts.add("query=$($query)") } # If fields is not null, then set to how we want to see if($PSBoundParameters.ContainsKey("fields")){ $uriparts.add("`$fields=$($fields)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskBranches.ps1' 57 #Region '.\Public\Get-TopdeskCategories.ps1' 0 function Get-TopdeskCategories{ [CmdletBinding()] param( [Parameter()][ValidateNotNullOrEmpty()][string]$fields, [Parameter()][ValidateNotNullOrEmpty()][string]$query, [Parameter()][ValidateNotNullOrEmpty()][string]$sort, [Parameter()][switch]$pretty ) $endpoint = "/tas/api/categories" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if($PSBoundParameters.ContainsKey("fields")){ $uriparts.add("fields=$($fields)") } if($PSBoundParameters.ContainsKey("query")){ $uriparts.add("query=$($query)") } if($PSBoundParameters.ContainsKey("sort")){ $uriparts.add("sort=$($sort)") } if($PSBoundParameters.ContainsKey("pretty")){ $uriparts.add("pretty=$($pretty.IsPresent)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.results.item.count) results." # Load results into an array foreach($item in $results.results.item){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskCategories.ps1' 42 #Region '.\Public\Get-TopdeskCurrency.ps1' 0 function Get-TopdeskCurrency{ [CmdletBinding()] param() $endpoint = "/tas/api/currency" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskCurrency.ps1' 20 #Region '.\Public\Get-TopdeskIncident.ps1' 0 <# .DESCRIPTION .PARAMETER id The ID of the incident .PARAMETER number The incident number .PARAMETER pageStart The offset to start at. The default is 0. .PARAMETER pageSize How many incidents should be returned max. Default is 10. .PARAMETER sort The sort order of the returned incidents. Incidents can be ordered by most of the fields. But for best performance one should order by one of the following fields: callDate, creationDate, modificationDate, targetDate, closedDate or id. It's faster to order by 1 field only. To specify if the order should be ascending or descending, append ":asc" or ":desc" to the field name. Multiple columns can be specified by comma-joining the orderings. Example: sort=tragetDate:asc,creationDate:desc. Fields not allowed for sorting are: externalLinks, escalationStatus, action, attachments, partialIncidents, partialIncidents.link .PARAMETER query A FIQL string to select which incidents should be returned. (See https://developers.topdesk.com/tutorial.html#query) .PARAMETER fields A comma-separated list of which fields should be returned. By default all fields will be returned. (slow) .PARAMETER dateFormat Format of date fields in json. When set to iso8601 dates will be sent in the form of '2020-10-01T14:10:00Z'. Otherwise old date format will be used: '2020-10-01T14:10:00.000+0000' .PARAMETER alltypes when present or when present and set to true will make all incident to be returned. Including partials and archived. This overrides the default behaviour when only firstLine and secondLine incidents are returned by default. This can be used in combinations with query parameter to narrow down the requited statuses. .PARAMETER all when present will make all incidents to be returned, looping over return of code 206 partial content #> function Get-TopdeskIncident { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][string][ValidateNotNullOrEmpty()]$id, [Parameter()][string][ValidateNotNullOrEmpty()]$number, [Parameter()][int][ValidateNotNullOrEmpty()]$pageStart = 0, [Parameter()][int][ValidateRange(1, 10000)]$pageSize = 10, [Parameter()][string][ValidateNotNullOrEmpty()]$sort, [Parameter()][string][ValidateNotNullOrEmpty()]$query, [Parameter()][string][ValidateNotNullOrEmpty()]$fields, [Parameter()][switch]$dateFormat, [Parameter()][switch]$alltypes, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/incidents" # Check if we are getting a specific incident or query against all incidents if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)" } elseif ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($pageSize)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("sort")) { $uriparts.add("sort=$($sort)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # If dateFormat is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("dateFormat")) { $uriparts.add("dateFormat=iso8601") } # If alltypes is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("alltypes")) { $uriparts.add("all=$($alltypes.IsPresent)") } # Add page start $uriparts.add("pageStart=$($pageStart)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.Results) { $data.Add($item) | Out-Null } $pagestart += $pageSize Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "pageStart=\d*", "pageStart=$($pagestart)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncident.ps1' 90 #Region '.\Public\Get-TopdeskIncidentActions.ps1' 0 function Get-TopdeskIncidentActions{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter()][ValidateNotNullOrEmpty()][string]$actionid, [Parameter()][int][ValidateNotNullOrEmpty()]$Start = 0, [Parameter()][int][ValidateRange(1, 100)]$page_Size = 10, [Parameter()][switch]$inlineimages, [Parameter()][switch]$non_api_attachment_urls, [Parameter()][switch]$all ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/actions" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/actions" } if ($PSBoundParameters.ContainsKey("actionid")) { $endpoint = "$($endpoint)/$($actionid)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($page_Size)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("inlineimages")) { $uriparts.add("inlineimages=$($inlineimages.IsPresent)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("non_api_attachment_urls")) { $uriparts.add("non_api_attachment_urls=$($non_api_attachment_urls.IsPresent)") } # Add page start $uriparts.add("start=$($start)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentActions.ps1' 57 #Region '.\Public\Get-TopdeskIncidentAttachmentDownload.ps1' 0 function Get-TopdeskIncidentAttachmentDownload{ [CmdletBinding()] param( [Alias("incidentid")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$attachmentid, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$downloadFile ) $endpoint = "/tas/api/incidents/id/$($id)/attachments/$($attachmentid)/download" try { Get-TopdeskAPIResponse -endpoint $endpoint -downloadFile $downloadFile -Verbose:$VerbosePreference | Out-Null } catch { throw $_ } } #EndRegion '.\Public\Get-TopdeskIncidentAttachmentDownload.ps1' 16 #Region '.\Public\Get-TopdeskIncidentAttachments.ps1' 0 function Get-TopdeskIncidentAttachments{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Alias("incidentid")][Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Alias("incidentnumber")][Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter()][int][ValidateNotNullOrEmpty()]$Start = 0, [Parameter()][int][ValidateRange(1, 10)]$page_Size = 10, [Parameter()][switch]$non_api_attachment_urls, [Parameter()][switch]$all ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/attachments" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/attachments" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($page_Size)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("non_api_attachment_urls")) { $uriparts.add("non_api_attachment_urls=$($non_api_attachment_urls.IsPresent)") } # Add page start $uriparts.add("start=$($start)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentAttachments.ps1' 50 #Region '.\Public\Get-TopdeskIncidentCallTypes.ps1' 0 function Get-TopdeskIncidentCallTypes{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/call_types" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentCallTypes.ps1' 22 #Region '.\Public\Get-TopdeskIncidentCategory.ps1' 0 function Get-TopdeskIncidentCategory{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][string]$id, [Parameter()][string]$name ) # The endpoint to get assets $endpoint = "/tas/api/incidents/categories" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ if($id -and $item.id.trim() -ne $id){continue} elseif($name -and ($item.name).trim() -ne $name){continue} $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentCategory.ps1' 28 #Region '.\Public\Get-TopdeskIncidentClosureCodes.ps1' 0 function Get-TopdeskIncidentClosureCodes{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/closure_codes" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentClosureCodes.ps1' 22 #Region '.\Public\Get-TopdeskIncidentDeescalationReasons.ps1' 0 function Get-TopdeskIncidentDeescalationReasons{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/deescalation-reasons" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentDeescalationReasons.ps1' 22 #Region '.\Public\Get-TopdeskIncidentDurations.ps1' 0 function Get-TopdeskIncidentDurations{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/durations" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentDurations.ps1' 22 #Region '.\Public\Get-TopdeskIncidentEntryTypes.ps1' 0 function Get-TopdeskIncidentEntryTypes{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/entry_types" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentEntryTypes.ps1' 22 #Region '.\Public\Get-TopdeskIncidentEscalationReasons.ps1' 0 function Get-TopdeskIncidentEscalationReasons{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/escalation-reasons" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentEscalationReasons.ps1' 22 #Region '.\Public\Get-TopdeskIncidentImpacts.ps1' 0 function Get-TopdeskIncidentImpacts{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/impacts" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentImpacts.ps1' 22 #Region '.\Public\Get-TopdeskIncidentPriorities.ps1' 0 function Get-TopdeskIncidentPriorities{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/priorities" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentPriorities.ps1' 22 #Region '.\Public\Get-TopdeskIncidentProgressTrail.ps1' 0 function Get-TopdeskIncidentProgressTrail{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true, ParameterSetName = "id")] [Parameter(Mandatory = $true, ParameterSetName = "countid")] [string][ValidateNotNullOrEmpty()]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")] [Parameter(Mandatory = $true, ParameterSetName = "countnumber")] [string][ValidateNotNullOrEmpty()]$number, [Parameter()][int][ValidateNotNullOrEmpty()]$Start = 0, [Parameter()][int][ValidateRange(1, 100)]$page_Size = 10, [Parameter()][switch]$inlineimages, [Parameter()][switch]$non_api_attachment_urls, [Parameter(Mandatory = $true, ParameterSetName = "countid")] [Parameter(Mandatory = $true, ParameterSetName = "countnumber")] [switch]$count, [Parameter()][switch]$all ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/progresstrail" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/progresstrail" } if ($PSBoundParameters.ContainsKey("count")) { $endpoint = "$($endpoint)/count" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($page_Size)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("inlineimages")) { $uriparts.add("inlineimages=$($inlineimages.IsPresent)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("non_api_attachment_urls")) { $uriparts.add("non_api_attachment_urls=$($non_api_attachment_urls.IsPresent)") } # Add page start $uriparts.add("start=$($start)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentProgressTrail.ps1' 63 #Region '.\Public\Get-TopdeskIncidentRequests.ps1' 0 function Get-TopdeskIncidentRequests{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter()][ValidateNotNullOrEmpty()][string]$requestid, [Parameter()][int][ValidateNotNullOrEmpty()]$Start = 0, [Parameter()][int][ValidateRange(1, 100)]$page_Size = 10, [Parameter()][switch]$inlineimages, [Parameter()][switch]$non_api_attachment_urls, [Parameter()][switch]$all ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/requests" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/requests" } if ($PSBoundParameters.ContainsKey("requestid")) { $endpoint = "$($endpoint)/$($requestid)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($page_Size)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("inlineimages")) { $uriparts.add("inlineimages=$($inlineimages.IsPresent)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("non_api_attachment_urls")) { $uriparts.add("non_api_attachment_urls=$($non_api_attachment_urls.IsPresent)") } # Add page start $uriparts.add("start=$($start)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentRequests.ps1' 57 #Region '.\Public\Get-TopdeskIncidentSearchList.ps1' 0 function Get-TopdeskIncidentSearchList { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][int[]]$tab = @(1, 2), [Parameter()][int[]]$searchList = @(1, 2, 3, 4, 5), [Parameter()][switch]$includeEmpty ) # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() # Loop through selected tabs foreach ($t in $tab) { #$t # Loop through search lists foreach ($list in $searchList) { #$list $endpoint = "/tas/api/incidents/free_fields/$($t)/searchlists/$($list)" try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference #$results Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $item | Add-Member -MemberType NoteProperty -Name "Tab" -Value $t -Force $item | Add-Member -MemberType NoteProperty -Name "searchList" -Value $list -Force $data.add($item) } if($results.Results.count -eq 0 -and $includeEmpty.IsPresent){ $item = [PSCUstomObject]@{ Tab = $t SearchList = $list } $data.add($item) } } catch { throw $_ } } } return $data } #EndRegion '.\Public\Get-TopdeskIncidentSearchList.ps1' 44 #Region '.\Public\Get-TopdeskIncidentServices.ps1' 0 function Get-TopdeskIncidentServices{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/slas/services" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentServices.ps1' 22 #Region '.\Public\Get-TopdeskIncidentSLAS.ps1' 0 function Get-TopdeskIncidentSLAS{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][int][ValidateRange(1, 10000)]$pageSize = 10, [Parameter()][string][ValidateNotNullOrEmpty()]$incident, [Parameter()][string][ValidateNotNullOrEmpty()]$contract, [Parameter()][string][ValidateNotNullOrEmpty()]$person, [Parameter()][string][ValidateNotNullOrEmpty()]$service, [Parameter()][string][ValidateNotNullOrEmpty()]$branch, [Parameter()][string][ValidateNotNullOrEmpty()]$budgetHolder, [Parameter()][string][ValidateNotNullOrEmpty()]$department, [Parameter()][string][ValidateNotNullOrEmpty()]$branchExtraA, [Parameter()][string][ValidateNotNullOrEmpty()]$branchExtraB, [Parameter()][datetime][ValidateNotNullOrEmpty()]$contractDate, [Parameter()][string][ValidateNotNullOrEmpty()]$callType, [Parameter()][string][ValidateNotNullOrEmpty()]$category, [Parameter()][string][ValidateNotNullOrEmpty()]$subcategory, [Parameter()][string][ValidateNotNullOrEmpty()]$asset ) $endpoint = "/tas/api/incidents/slas" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() $uriparts.add("pageSize=$($pageSize)") # If incident is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("incident")) { $uriparts.add("incident=$($incident)") } # If contract is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("contract")) { $uriparts.add("contract=$($contract)") } # If person is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("person")) { $uriparts.add("person=$($person)") } # If service is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("service")) { $uriparts.add("service=$($service)") } # If branch is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("branch")) { $uriparts.add("sort=$($branch)") } # If budgetHolder is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("budgetHolder")) { $uriparts.add("budgetHolder=$($budgetHolder)") } # If department is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("department")) { $uriparts.add("department=$($department)") } # If branchExtraA is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("branchExtraA")) { $uriparts.add("branchExtraA=$($branchExtraA)") } # If branchExtraB is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("branchExtraB")) { $uriparts.add("branchExtraB=$($branchExtraB)") } # If contractDate is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("contractDate")) { $uriparts.add("contractDate=$($contractDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"))") } # If callType is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("callType")) { $uriparts.add("callType=$($callType)") } # If category is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("category")) { $uriparts.add("category=$($category)") } # If subcategory is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("subcategory")) { $uriparts.add("subcategory=$($subcategory)") } # If asset is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("asset")) { $uriparts.add("asset=$($asset)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.results.Count) results." # Load results into an array foreach($item in $results.Results.results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentSLAS.ps1' 70 #Region '.\Public\Get-TopdeskIncidentStatuses.ps1' 0 function Get-TopdeskIncidentStatuses{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/statuses" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentStatuses.ps1' 22 #Region '.\Public\Get-TopdeskIncidentSubcategories.ps1' 0 function Get-TopdeskIncidentSubcategories{ [CmdletBinding()] [Alias("Get-TopdeskIncidentSubcategory")] param( [Parameter()][string]$id, [Parameter()][string]$name, [Alias("category_id")][Parameter()][string]$categoryid, [Alias("category_name")][Parameter()][string]$categoryname ) # The endpoint to get assets $endpoint = "/tas/api/incidents/subcategories" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ if($id -and $item.id.trim() -ne $id){continue} elseif($name -and ($item.name).trim() -ne $name){continue} if($categoryid -and $item.category.id -ne $categoryid){continue} elseif($categoryname -and $item.category.name.trim() -ne $categoryname){continue} $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentSubcategories.ps1' 32 #Region '.\Public\Get-TopdeskIncidentTimespent.ps1' 0 function Get-TopdeskIncidentTimespent{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][string][ValidateNotNullOrEmpty()]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][string][ValidateNotNullOrEmpty()]$number ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/timespent" } elseif ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/timespent" } $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference $process = $results.results | Where-Object {$_ -ne ""} Write-Verbose "Returned $($process.Count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentTimespent.ps1' 30 #Region '.\Public\Get-TopdeskIncidentUrgencies.ps1' 0 function Get-TopdeskIncidentUrgencies{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( ) $endpoint = "/tas/api/incidents/urgencies" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskIncidentUrgencies.ps1' 22 #Region '.\Public\Get-TopdeskKnowledgeItem.ps1' 0 function Get-TopdeskKnowledgeItem{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Alias("page_size")][Parameter()][ValidateRange(1, 1000)][int]$pageSize = 100, [Alias("start")][Parameter()][int]$pageStart = 0, [Parameter()][string]$fields, [Parameter()][string]$query, [Parameter()][string]$language = "en-CA", [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("start=$($pageStart)") # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("page_size=$($pageSize)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("language")) { $uriparts.add("language=$($language)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference if($results.results.item.count -gt 0){ $process = $results.results.item } else{ $process = $results.results } # Load results into an array foreach ($item in $process) { $data.Add($item) | Out-Null } $pagestart += $pageSize Write-Verbose "Returned $($results.Results.item.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($pagestart)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskKnowledgeItem.ps1' 60 #Region '.\Public\Get-TopdeskKnowledgeItemAttachmentDownload.ps1' 0 function Get-TopdeskKnowledgeItemAttachmentDownload{ [CmdletBinding()] param( [Alias("incidentid")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$downloadFile, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$attachmentIdentifier ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/attachments/$($attachmentIdentifier)/download" try { Get-TopdeskAPIResponse -endpoint $endpoint -downloadFile $downloadFile -Verbose:$VerbosePreference | Out-Null } catch { throw $_ } } #EndRegion '.\Public\Get-TopdeskKnowledgeItemAttachmentDownload.ps1' 16 #Region '.\Public\Get-TopdeskKnowledgeItemAttachments.ps1' 0 function Get-TopdeskKnowledgeItemAttachments{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Alias("identifier")][Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/attachments" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskKnowledgeItemAttachments.ps1' 25 #Region '.\Public\Get-TopdeskKnowledgeItemBranches.ps1' 0 function Get-TopdeskKnowledgeItemBranches{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/branches" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskKnowledgeItemBranches.ps1' 24 #Region '.\Public\Get-TopdeskKnowledgeItemImageDownload.ps1' 0 function Get-TopdeskKnowledgeItemImageDownload{ [CmdletBinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$imageName, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$downloadFile ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/images/$($imageName)/download" try { Get-TopdeskAPIResponse -endpoint $endpoint -downloadFile $downloadFile -Verbose:$VerbosePreference | Out-Null } catch { throw $_ } } #EndRegion '.\Public\Get-TopdeskKnowledgeItemImageDownload.ps1' 16 #Region '.\Public\Get-TopdeskKnowledgeItemImages.ps1' 0 function Get-TopdeskKnowledgeItemImages { [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Alias("identifier")][Parameter(Mandatory = $true)][string]$id ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/images" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add([PSCustomObject]@{'Image' = $item}) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskKnowledgeItemImages.ps1' 25 #Region '.\Public\Get-TopdeskKnowledgeItemStatues.ps1' 0 function Get-TopdeskKnowledgeItemStatues{ [cmdletbinding()] param( [Parameter()][bool]$archived ) $endpoint = "/services/knowledge-base-v1/knowledgeItemStatuses" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If archived is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("archived")) { $uriparts.add("archived=$($archived)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Results.Count) results." # Load results into an array foreach($item in $results.Results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskKnowledgeItemStatues.ps1' 28 #Region '.\Public\Get-TopdeskLanguages.ps1' 0 function Get-TopdeskLanguages{ [cmdletbinding()] param() $endpoint = "/tas/api/languages" $data = [System.Collections.Generic.List[PSObject]]@() try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $data.Add($item) | Out-Null } } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskLanguages.ps1' 20 #Region '.\Public\Get-TopdeskOperatorChangeProgressTrail.ps1' 0 function Get-TopdeskOperatorChangeProgressTrail{ [CmdletBinding()] [Alias("Get-TopdeskChangeProgress")] param( [Alias("changeID")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()][switch]$inlineimages, [Parameter()][switch]$browserFriendlyUrls, [Parameter()][ValidateSet("memo", "attachment", "link","email")][string]$type ) $endpoint = "/tas/api/operatorChanges/$($id)/progresstrail" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() ## If inlineimages is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("inlineimages")) { $uriparts.add("inlineimages=$($inlineimages.isPresent)") } ## If browserFriendlyUrls is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("browserFriendlyUrls")) { $uriparts.add("browserFriendlyUrls=$($browserFriendlyUrls.isPresent)") } ## If type is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("type")) { $uriparts.add("type=$($type)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Results.Count) results." # Load results into an array foreach($item in $results.Results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperatorChangeProgressTrail.ps1' 37 #Region '.\Public\Get-TopdeskOperatorChanges.ps1' 0 function Get-TopdeskOperatorChanges{ [CmdletBinding()] [Alias("Get-TopDeskChangeRequest")] param( [Parameter()][string]$id, [Parameter()][string]$query, [Parameter()][ValidateSet("id","creationDate","simple.closedDate","simple.plannedImplementationDate","simple.plannedStartDate","phases.rfc.plannedEndDate","phases.progress.plannedEndDate","phases.evaluation.plannedEndDate")][string]$sort, [Parameter()][ValidateSet("asc","desc")][string]$direction = "asc", [Parameter()][ValidateRange(1, 5000)][int]$pageSize = 1000, [Parameter()][int]$pageStart = 0, [Parameter()][string]$fields, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/operatorChanges" # Check if we are getting a specific incident or query against all incidents if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/operatorChanges/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("pageStart=$($pageStart)") # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($pageSize)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("sort")) { $uriparts.add("sort=$($sort):$($direction)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference if($results.results.results.count -eq 0){ $process = $results.results } else{ $process = $results.results.results } # Load results into an array foreach ($item in $process) { $data.Add($item) | Out-Null } $pagestart += $pageSize Write-Verbose "Returned $($results.Results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "pageStart=\d*", "pageStart=$($pagestart)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperatorChanges.ps1' 62 #Region '.\Public\Get-TopdeskOperatorChangesOrderedItems.ps1' 0 function Get-TopdeskOperatorChangesOrderedItems{ [CmdletBinding()] [Alias("Get-TopdeskOrderedItems")] param( [Alias("changeID")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) # The endpoint to get assets $endpoint = "/tas/api/operatorChanges/$($id)/orderedItems" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Results.Count) results." # Load results into an array foreach($item in $results.Results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperatorChangesOrderedItems.ps1' 25 #Region '.\Public\Get-TopdeskOperatorChangesRequests.ps1' 0 function Get-TopdeskOperatorChangesRequests{ [CmdletBinding()] [Alias("Get-TopdeskChangeRequestText")] param( [Alias("changeID")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()][switch]$inlineimages, [Parameter()][switch]$browserFriendlyUrls ) # The endpoint to get assets $endpoint = "/tas/api/operatorChanges/$($id)/requests" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() ## If inlineimages is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("inlineimages")) { $uriparts.add("inlineimages=$($inlineimages.isPresent)") } ## If browserFriendlyUrls is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("browserFriendlyUrls")) { $uriparts.add("browserFriendlyUrls=$($browserFriendlyUrls.isPresent)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Results.Count) results." # Load results into an array foreach($item in $results.Results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperatorChangesRequests.ps1' 35 #Region '.\Public\Get-TopdeskOperatorGroups.ps1' 0 function Get-TopdeskOperatorGroups{ [CmdletBinding()] [Alias("Get-TopdeskOperatorGroup")] param( [Parameter()][ValidateNotNullOrEmpty()][string]$id, [Parameter()][int]$start = 0, [Parameter()][ValidateRange(1, 100)][int]$page_size = 10, [Parameter()][ValidateNotNullOrEmpty()][string]$query, [Parameter()][ValidateNotNullOrEmpty()][string]$fields, [Parameter()][switch]$all ) $endpoint = "/tas/api/operatorgroups" if ($PSBoundParameters.ContainsKey("id")){ $endpoint = "/tas/api/operatorgroups/id/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("start=$($start)") # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("page_size")) { $uriparts.add("page_size=$($page_size)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperatorGroups.ps1' 50 #Region '.\Public\Get-TopdeskOperators.ps1' 0 function Get-TopdeskOperators{ [CmdletBinding()] [Alias("Get-TopdeskOperator")] param( [Parameter()][int]$start = 0, [Parameter()][ValidateRange(1, 100)][int]$page_size = 10, [Parameter()][ValidateNotNullOrEmpty()][string]$query, [Parameter()][ValidateNotNullOrEmpty()][string]$fields, [Parameter()][switch]$all ) $endpoint = "/tas/api/operators" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("start=$($start)") # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("page_size")) { $uriparts.add("page_size=$($page_size)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $start += $page_size Write-Verbose "Returned $($results.Results.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($start)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskOperators.ps1' 46 #Region '.\Public\Get-TopdeskPersons.ps1' 0 function Get-TopdeskPersons{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Parameter()][int]$start = 0, [Parameter()][ValidateRange(1, 5000)][int]$page_size = 10, [Parameter()][string]$fields, [Parameter()][string]$sort, [Parameter()][string]$query, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/persons" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/id/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("start=$($start)") $uriparts.add("page_size=$($page_size)") if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("`$fields=$($fields)") } if ($PSBoundParameters.ContainsKey("sort")) { $uriparts.add("sort=$($sort)") } if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $pagestart += $page_size Write-Verbose "Returned $($results.Results.item.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($pagestart)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskPersons.ps1' 50 #Region '.\Public\Get-TopdeskPersonsAvatar.ps1' 0 function Get-TopdeskPersonsAvatar{ [cmdletbinding()] param( [parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) $endpoint = "/tas/api/persons/id/$($id)/avatar" # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference return $results.results } #EndRegion '.\Public\Get-TopdeskPersonsAvatar.ps1' 11 #Region '.\Public\Get-TopdeskPersonsContract.ps1' 0 function Get-TopdeskPersonsContract{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter(Mandatory = $true)][string]$id ) # The endpoint to get assets $endpoint = "/tas/api/persons/id/$($id)/contract" try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference } catch { throw $_ } return $results.results } #EndRegion '.\Public\Get-TopdeskPersonsContract.ps1' 17 #Region '.\Public\Get-TopdeskPersonsCount.ps1' 0 function Get-TopdeskPersonsCount{ [cmdletbinding()] [OutputType([int])] param( [Parameter()][string]$query ) # The endpoint to get assets $endpoint = "/tas/api/persons/count" # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $results.Results.numberOfPersons } #EndRegion '.\Public\Get-TopdeskPersonsCount.ps1' 28 #Region '.\Public\Get-TopdeskPersonsLookup.ps1' 0 function Get-TopdeskPersonsLookup{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Parameter()][ValidateRange(1, 10000)][int]$top = 1000, [Parameter()][string]$name, [Parameter()][bool]$archived, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/persons/lookup" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("top")) { $uriparts.add("`$top=$($top)") } if ($PSBoundParameters.ContainsKey("name")) { $uriparts.add("name=$($name)") } if ($PSBoundParameters.ContainsKey("archived")) { $uriparts.add("archived=$($archived)") } if ($PSBoundParameters.ContainsKey("all")) { $uriparts.add("`$all=$($all.IsPresent)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if($results.results.results.count -gt 0){ $process = $results.results.results } else{ $process = $results.results } Write-Verbose "Returned $($process.count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskPersonsLookup.ps1' 45 #Region '.\Public\Get-TopdeskPersonsPrivateDetails.ps1' 0 function Get-TopdeskPersonsPrivateDetails{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter(Mandatory = $true)][string]$id ) # The endpoint to get assets $endpoint = "/tas/api/persons/id/$($id)/privateDetails" try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference } catch { throw $_ } return $results.results } #EndRegion '.\Public\Get-TopdeskPersonsPrivateDetails.ps1' 17 #Region '.\Public\Get-TopdeskPersonsSearchList.ps1' 0 function Get-TopdeskPersonsSearchList{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][int[]]$tab = @(1, 2), [Parameter()][int[]]$searchList = @(1, 2, 3, 4, 5), [Parameter()][string]$external_link_id, [Parameter()][string]$external_link_type ) # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("external_link_id")) { $uriparts.add("external_link_id=$($external_link_id)") } if ($PSBoundParameters.ContainsKey("external_link_type")) { $uriparts.add("external_link_type=$($external_link_type)") } # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() # Loop through selected tabs foreach ($t in $tab) { #$t # Loop through search lists foreach ($list in $searchList) { #$list $endpoint = "/tas/api/persons/free_fields/$($t)/searchlists/$($list)" # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference #$results Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $item | Add-Member -MemberType NoteProperty -Name "Tab" -Value $t -Force $item | Add-Member -MemberType NoteProperty -Name "searchList" -Value $list -Force $data.add($item) } if($results.Results.count -eq 0 -and $includeEmpty.IsPresent){ $item = [PSCUstomObject]@{ Tab = $t SearchList = $list } $data.add($item) } } catch { throw $_ } } } return $data } #EndRegion '.\Public\Get-TopdeskPersonsSearchList.ps1' 51 #Region '.\Public\Get-TopdeskProductVersion.ps1' 0 function Get-TopdeskProductVersion{ [CmdletBinding()] param( ) $endpoint = "/tas/api/productVersion" $data = [System.Collections.Generic.List[PSObject]]@() try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $data.Add($item) | Out-Null } } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskProductVersion.ps1' 21 #Region '.\Public\Get-TopdeskRoleConfigurations.ps1' 0 function Get-TopdeskRoleConfigurations{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id ) $endpoint = "/services/permissions/roleConfigurations" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("roleId")) { $uriparts.add("roleId=$($roleId -join ",")") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if($results.results._embedded.item){ $process = $results.results._embedded.item } else{ $process = $results.results } Write-Verbose "Returned $($process.Count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskRoleConfigurations.ps1' 37 #Region '.\Public\Get-TopdeskRoles.ps1' 0 function Get-TopdeskRoles{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Parameter()][bool]$archived, [Parameter()][bool]$licensed, [Parameter()][string]$fields ) $endpoint = "/services/permissions/roles" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("archived")) { $uriparts.add("archived=$($archived)") } if ($PSBoundParameters.ContainsKey("licensed")) { $uriparts.add("licensed=$($licensed)") } if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if($results.results._embedded.item){ $process = $results.results._embedded.item } else{ $process = $results.results } Write-Verbose "Returned $($process.Count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskRoles.ps1' 42 #Region '.\Public\Get-TopdeskServiceWindows.ps1' 0 function Get-TopdeskServiceWindows{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter()][ValidateNotNullOrEmpty()][string]$id, [Parameter()][int][ValidateRange(1, 10000)]$top = 1000, [Parameter()][string][ValidateNotNullOrEmpty()]$name, [Parameter()][switch]$archived ) $endpoint = "/tas/api/serviceWindow/lookup/" if($PSBoundParameters.ContainsKey("id")){ $endpoint = "$($endpoint)$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if($PSBoundParameters.ContainsKey("top")){ $uriparts.add("`$top=$($top)") } if($PSBoundParameters.ContainsKey("name")){ $uriparts.add("name=$($name)") } if($PSBoundParameters.ContainsKey("archived")){ $uriparts.add("archived=$($archived.IsPresent)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if($results.Results.Results.count -gt 0){ $process = $results.Results.Results } else{ $process = $results.Results } Write-Verbose "Returned $($process.Count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskServiceWindows.ps1' 49 #Region '.\Public\Get-TopdeskSupplierContacts.ps1' 0 function Get-TopdeskSupplierContacts{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Parameter()][ValidateRange(1, 10000)][int]$page_size = 1000, [Parameter()][string]$query ) # The endpoint to get assets $endpoint = "/tas/api/supplierContacts" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() $uriparts.add("page_size=$($pageSize)") if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach($item in $results.Results){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskSupplierContacts.ps1' 34 #Region '.\Public\Get-TopdeskSuppliers.ps1' 0 function Get-TopdeskSuppliers{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Alias("start")][Parameter()][int]$pageStart = 0, [Alias("page_size")][Parameter()][ValidateRange(1, 100)][int]$pageSize = 10, [Parameter()][string]$query, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/suppliers" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageStart is not null, then add to URI parts $uriparts.add("start=$($pageStart)") $uriparts.add("page_size=$($pageSize)") if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.results) { $data.Add($item) | Out-Null } $pagestart += $pageSize Write-Verbose "Returned $($results.Results.item.Count) results. Current result set is $($data.Count) items." $uri = $uri -replace "start=\d*", "start=$($pagestart)" } while ($all.IsPresent -and $results.StatusCode -eq 206) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskSuppliers.ps1' 46 #Region '.\Public\Get-TopdeskSuppliersLookup.ps1' 0 function Get-TopdeskSuppliersLookup{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter()][string]$id, [Parameter()][ValidateRange(1, 10000)][int]$top = 1000, [Parameter()][string]$name, [Parameter()][bool]$archived, [Parameter()][switch]$all ) # The endpoint to get assets $endpoint = "/tas/api/suppliers/lookup" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() if ($PSBoundParameters.ContainsKey("top")) { $uriparts.add("`$top=$($top)") } if ($PSBoundParameters.ContainsKey("name")) { $uriparts.add("`$name=$($name)") } if ($PSBoundParameters.ContainsKey("archived")) { $uriparts.add("archived=$($archived)") } if ($PSBoundParameters.ContainsKey("all")) { $uriparts.add("`$all=$($all.IsPresent)") } # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" $data = [System.Collections.Generic.List[PSObject]]@() try{ # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference if($results.results.results.count -gt 0){ $process = $results.results.results } else{ $process = $results.results } Write-Verbose "Returned $($process.count) results." # Load results into an array foreach($item in $process){ $data.Add($item) | Out-Null } } catch{ throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskSuppliersLookup.ps1' 45 #Region '.\Public\Get-TopdeskTimeRegistrations.ps1' 0 function Get-TopdeskTimeRegistrations{ [CmdletBinding(DefaultParameterSetName = "All")] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][string][ValidateNotNullOrEmpty()]$id, [Alias("start")][Parameter()][int][ValidateNotNullOrEmpty()]$pageStart = 0, [Alias("page_size")][Parameter()][int][ValidateRange(1, 10000)]$pageSize = 100, [Parameter()][string][ValidateNotNullOrEmpty()]$query, [Parameter()][string][ValidateNotNullOrEmpty()]$fields, [Parameter()][switch]$all ) $endpoint = "/tas/api/incidents/timeregistrations" if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "$($endpoint)/$($id)" } # Create a list of the URI parts that we would add the to the endpoint $uriparts = [System.Collections.Generic.List[PSCustomObject]]@() # If pageSize is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("pageSize")) { $uriparts.add("pageSize=$($pageSize)") } # If sort is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("sort")) { $uriparts.add("sort=$($sort)") } # If query is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("query")) { $uriparts.add("query=$($query)") } # If fields is not null, then add to URI parts if ($PSBoundParameters.ContainsKey("fields")) { $uriparts.add("fields=$($fields)") } # Add page start $uriparts.add("pageStart=$($pageStart)") # Generate the final API endppoint URI $endpoint = "$($endpoint)?$($uriparts -join "&")" try { # Array to hold results from the API call $data = [System.Collections.Generic.List[PSObject]]@() $uri = $endpoint do { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $uri -Verbose:$VerbosePreference # Load results into an array foreach ($item in $results.Results.Results) { $data.Add($item) | Out-Null } $pagestart += $pageSize Write-Verbose "Returned $($results.Results.Results.Count) results. Current result set is $($data.Count) items." $uri = $results.Results.next -replace $global:topdeskAPIEndpoint } while ($all.IsPresent -and $null -ne $results.Results.next) } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskTimeRegistrations.ps1' 52 #Region '.\Public\Get-TopdeskTimespentReasons.ps1' 0 function Get-TopdeskTimespentReasons { [CmdletBinding()] param( ) $endpoint = "/tas/api/timespent-reasons" $data = [System.Collections.Generic.List[PSObject]]@() try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $data.Add($item) | Out-Null } } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskTimespentReasons.ps1' 21 #Region '.\Public\Get-TopdeskVersion.ps1' 0 function Get-TopdeskVersion{ [CmdletBinding()] param( ) $endpoint = "/tas/api/version" $data = [System.Collections.Generic.List[PSObject]]@() try { # Execute API Call $results = Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference Write-Verbose "Returned $($results.Results.Count) results." # Load results into an array foreach ($item in $results.Results) { $data.Add($item) | Out-Null } } catch { throw $_ } return $data } #EndRegion '.\Public\Get-TopdeskVersion.ps1' 21 #Region '.\Public\New-TopdeskAssetImportUpload.ps1' 0 function New-TopdeskAssetImportUpload{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$filePath, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$fileName, [Parameter()][string]$TopdeskTenant ) $endpoint = "/services/import-to-api-v1/api/sourceFiles?filename=$($fileName)" $header = $global:topdeskHeader.Clone() $header."Content-Type" = "application/octet-stream" try { Get-TopdeskAPIResponse -endpoint $endpoint -Method "PUT" -headers $header -filePath $filePath -Verbose:$VerbosePreference } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskAssetImportUpload.ps1' 18 #Region '.\Public\New-TopdeskAssetUpload.ps1' 0 function New-TopdeskAssetUpload{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$assetId, [Parameter(Mandatory = $true)][string]$uploadfile ) $endpoint = "/tas/api/assetmgmt/uploads?assetId=$($assetid)" # Override the default header $header = $global:topdeskHeader.Clone() $header."content-type" = "multipart/form-data; boundary=BOUNDARY" $file = Get-Item $uploadfile $fileContentEncoded = [convert]::ToBase64String((get-content $file.FullName -AsByteStream -Raw)) $body = @" --BOUNDARY Content-Disposition: form-data; name="file"; filename="$($file.Name)" Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: base64 $($fileContentEncoded) --BOUNDARY-- "@ Get-TopdeskAPIResponse -endpoint $endpoint -Method "Post" -headers $header -body $body -Verbose:$VerbosePreference } #EndRegion '.\Public\New-TopdeskAssetUpload.ps1' 24 #Region '.\Public\New-TopdeskHTMLtoPDF.ps1' 0 function New-TopdeskHTMLtoPDF { [CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$html, [Parameter(Mandatory = $true)][string]$downloadFile, [Parameter()][string]$format, [Parameter()][string]$margin_top, [Parameter()][string]$margin_bottom, [Parameter()][string]$margin_left, [Parameter()][string]$margin_right ) $endpoint = "/services/pdf-generator-v1/convert/html" $pdf = @{ html = $html downloadFile = $downloadFile } if ($PSBoundParameters.ContainsKey("format")) { $pdf.Add("format", $format) } foreach ($item in ($PSBoundParameters.keys | Where-Object { $_ -like "margin*" })) { $pdf.add($item, (Get-Variable -Name $item).value) } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($pdf | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" -downloadFile $downloadFile | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskHTMLtoPDF.ps1' 31 #Region '.\Public\New-TopdeskIncident.ps1' 0 function New-TopdeskIncident{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = 'body')][PSCustomObject]$body, [Parameter(Mandatory = $true,ParameterSetName = 'registeredCaller')][ValidateNotNullOrEmpty()][string]$caller_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_branch_id, [Parameter(Mandatory = $true,ParameterSetName = 'nonregisteredCaller')][ValidateNotNullOrEmpty()][string]$caller_dynamicName, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_phoneNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_mobileNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_email, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_department_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_department_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_location_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_budgetHolder_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_budgetHolder_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldA_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldA_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldB_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldB_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_callerLookup_id, [Parameter()][ValidateNotNullOrEmpty()][string]$status, [Parameter()][ValidateNotNullOrEmpty()][string]$briefDescription, [Parameter()][ValidateNotNullOrEmpty()][string]$request, [Parameter()][ValidateNotNullOrEmpty()][string]$action, [Parameter()][ValidateNotNullOrEmpty()][bool]$actionInvisibleForCaller, [Parameter()][ValidateNotNullOrEmpty()][string]$entryType_id, [Parameter()][ValidateNotNullOrEmpty()][string]$entryType_name, [Parameter()][ValidateNotNullOrEmpty()][string]$callType_id, [Parameter()][ValidateNotNullOrEmpty()][string]$callType_name, [Parameter()][ValidateNotNullOrEmpty()][string]$category_id, [Parameter()][ValidateNotNullOrEmpty()][string]$category_name, [Parameter()][ValidateNotNullOrEmpty()][string]$subcategory_id, [Parameter()][ValidateNotNullOrEmpty()][string]$subcategory_name, [Parameter()][ValidateNotNullOrEmpty()][string]$externalNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$object_id, [Parameter()][ValidateNotNullOrEmpty()][string]$object_name, [Parameter()][ValidateNotNullOrEmpty()][string]$location_id, [Parameter()][ValidateNotNullOrEmpty()][string]$branch_id, [Parameter()][ValidateNotNullOrEmpty()][string]$mainIncident_id, [Parameter()][ValidateNotNullOrEmpty()][string]$mainIncident_number, [Parameter()][ValidateNotNullOrEmpty()][string]$impact_id, [Parameter()][ValidateNotNullOrEmpty()][string]$impact_name, [Parameter()][ValidateNotNullOrEmpty()][string]$urgency_id, [Parameter()][ValidateNotNullOrEmpty()][string]$urgency_name, [Parameter()][ValidateNotNullOrEmpty()][string]$priority_id, [Parameter()][ValidateNotNullOrEmpty()][string]$priority_name, [Parameter()][ValidateNotNullOrEmpty()][string]$duration_id, [Parameter()][ValidateNotNullOrEmpty()][string]$duration_name, [Parameter()][ValidateNotNullOrEmpty()][datetime]$targetDate, [Parameter()][ValidateNotNullOrEmpty()][string]$sla_id, [Parameter()][ValidateNotNullOrEmpty()][bool]$onHold, [Parameter()][ValidateNotNullOrEmpty()][string]$operator_id, [Parameter()][ValidateNotNullOrEmpty()][string]$operatorGroup_id, [Parameter()][ValidateNotNullOrEmpty()][string]$supplier_id, [Parameter()][ValidateNotNullOrEmpty()][string]$processingStatus_id, [Parameter()][ValidateNotNullOrEmpty()][string]$processingStatus_name, [Parameter()][ValidateNotNullOrEmpty()][bool]$responded, [Parameter()][ValidateNotNullOrEmpty()][datetime]$responseDate, [Parameter()][ValidateNotNullOrEmpty()][bool]$completed, [Parameter()][ValidateNotNullOrEmpty()][datetime]$completedDate, [Parameter()][ValidateNotNullOrEmpty()][bool]$closed, [Parameter()][ValidateNotNullOrEmpty()][datetime]$closedDate, [Parameter()][ValidateNotNullOrEmpty()][string]$closureCode_id, [Parameter()][ValidateNotNullOrEmpty()][string]$closureCode_name, [Parameter()][ValidateNotNullOrEmpty()][decimal]$costs, [Parameter()][ValidateNotNullOrEmpty()][int]$feedbackRating, [Parameter()][ValidateNotNullOrEmpty()][string]$feedbackMessage, [Parameter()][ValidateNotNullOrEmpty()][bool]$majorCall, [Parameter()][ValidateNotNullOrEmpty()][string]$majorCallObject_id, [Parameter()][ValidateNotNullOrEmpty()][string]$majorCallObject_number, [Parameter()][ValidateNotNullOrEmpty()][bool]$publishToSsd, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean1, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean2, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean3, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean4, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean5, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number1, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number2, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number3, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number4, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo5, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date1, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date2, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date3, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date4, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist1_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist1_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist2_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist2_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist3_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist3_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist4_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist4_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist5_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist5_name, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean1, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean2, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean3, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean4, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean5, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number1, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number2, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number3, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number4, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo5, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date1, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date2, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date3, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date4, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist1_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist1_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist2_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist2_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist3_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist3_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist4_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist4_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist5_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist5_name, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_id, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_type, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_date ) $endpoint = "/tas/api/incidents" if (-not $PSBoundParameters.ContainsKey("body")) { $body = @{} foreach($item in $PsBoundParameters.GetEnumerator()){ if($item.key -eq "Verbose"){continue} $key = $item.Key.split("_") if($key.count -gt 1){ $parent = "" for($i = 0; $i -lt $key.count - 1; $i++){ if($i -eq 0){ if(!$body.ContainsKey($key[$i])){ $body.Add($key[$i],@{}) | Out-Null } $parent = $key[$i] } else{ $scriptBlock = " if(!`$body.$($parent).ContainsKey(`"$($key[$i])`")){ `$body.$($parent).Add(`"$($key[$i])`",@{}) | Out-Null } `$parent = `"$($parent).$($key[$i])`" " Invoke-Expression $scriptBlock } } $scriptBlock = " `$body.$($parent).Add(`"$($key[$i])`",`$item.value) " Invoke-Expression $scriptBlock } else{ if(!$body.ContainsKey($item.Key)){ $body.Add($item.Key,$item.Value) | Out-Null } } } } try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -AllowInsecureRedirect Write-Verbose "Created incident." } catch { throw $_ } return $results.results } #EndRegion '.\Public\New-TopdeskIncident.ps1' 192 #Region '.\Public\New-TopdeskIncidentAttachment.ps1' 0 function New-TopdeskIncidentAttachment{ [CmdletBinding()] [Alias("Add-TopdeskIncidentAttachment")] param( [Alias("id")][Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$incidentId, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$incidentNumber, [Parameter()][switch]$non_api_attachment_urls, [Parameter()][ValidateNotNullOrEmpty()][string]$filepath, [Parameter()][ValidateNotNullOrEmpty()][string]$filename, [Parameter()][switch]$invisibleForCaller, [Parameter()][ValidateNotNullOrEmpty()][string]$description ) if($PSBoundParameters.ContainsKey("incidentId")){ $endpoint = "/tas/api/incidents/id/$($incidentid)/attachments" } elseif($PSBoundParameters.ContainsKey("incidentNumber")){ $endpoint = "/tas/api/incidents/number/$($incidentNumber)/attachments" } $fileContentEncoded = [convert]::ToBase64String((get-content $filepath -AsByteStream -Raw)) $header = $global:topdeskHeader.Clone() $header."content-type" = "multipart/form-data; boundary=BOUNDARY" $body = @" --BOUNDARY Content-Disposition: form-data; name="invisibleForCaller" $($invisibleForCaller.IsPresent) --BOUNDARY Content-Disposition: form-data; name="description" $($description) --BOUNDARY Content-Disposition: form-data; name="file"; filename="$($filename)" Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: base64 $($fileContentEncoded) --BOUNDARY-- "@ try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method "Post" -headers $header -body $body -Verbose:$VerbosePreference } catch { if ($_.Exception.Message -eq "Conflict") { Write-Output "Image already exists ($($imagename)). Skipping." } else { throw $_ } } return $results.Results } #EndRegion '.\Public\New-TopdeskIncidentAttachment.ps1' 53 #Region '.\Public\New-TopdeskKnowledgeItem.ps1' 0 function New-TopdeskKnowledgeItem { [cmdletbinding()] param( [Parameter(Mandatory = $true, ParameterSetName = 'body')][PSCustomObject]$body, [Parameter(ParameterSetName = 'Title')][string]$parent, [Parameter(ParameterSetName = 'Title')][string]$language = "en-CA", [Parameter(Mandatory = $true, ParameterSetName = 'Title')][string]$title, [Parameter(ParameterSetName = 'Title')][string]$description, [Parameter(ParameterSetName = 'Title')][string]$content, [Parameter(ParameterSetName = 'Title')][string]$commentsForOperators, [Parameter(ParameterSetName = 'Title')][string]$keywords, [Parameter(ParameterSetName = 'Title')][ValidateSet("NOT_VISIBLE", "VISIBLE", "VISIBLE_IN_PERIOD")][string]$sspVisibility = "NOT_VISIBLE", [Parameter(ParameterSetName = 'Title')][datetime]$sspVisibleFrom, [Parameter(ParameterSetName = 'Title')][datetime]$sspVisibleUntil, [Parameter(ParameterSetName = 'Title')][bool]$sspVisibilityFilteredOnBranches = $false, [Parameter(ParameterSetName = 'Title')][bool]$operatorVisibilityFilteredOnBranches = $false, [Parameter(ParameterSetName = 'Title')][bool]$openKnowledgeItem = $false, [Parameter(ParameterSetName = 'Title')][string]$status, [Parameter(ParameterSetName = 'Title')][string]$manager, [Parameter(ParameterSetName = 'Title')][string]$externalLinkid, [Parameter(ParameterSetName = 'Title')][string]$externalLinktype, [Parameter(ParameterSetName = 'Title')][datetime]$externalLinkdate ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems" if (-not $PSBoundParameters.ContainsKey("body")) { $body = @{ parent = @{ number = $parent } translation = @{ language = $language content = @{ title = $title description = $description content = $content commentsForOperators = $commentsForOperators keywords = $keywords } } visibility = @{ sspVisibility = $sspVisibility sspVisibleFrom = $sspVisibleFrom sspVisibleUntil = $sspVisibleUntil sspVisibilityFilteredOnBranches = $sspVisibilityFilteredOnBranches operatorVisibilityFilteredOnBranches = $operatorVisibilityFilteredOnBranches openKnowledgeItem = $openKnowledgeItem } externalLink = @{ id = $externalLinkid type = $externalLinktype date = $externalLinkdate } } if ($PSBoundParameters.ContainsKey("status")) { $body.Add("status", @{id = $status}) | Out-Null } if ($PSBoundParameters.ContainsKey("manager")) { $body.Add("manager",@{id = $manager}) | Out-Null } } try { $header = $global:topdeskHeader.Clone() $header."content-type" = "application/x.topdesk-kb-create-ki-v1+json" Get-TopdeskAPIResponse -endpoint $endpoint -headers $header -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -AllowInsecureRedirect Write-Verbose "Created knowledgeitem." } catch { throw $_ } } #EndRegion '.\Public\New-TopdeskKnowledgeItem.ps1' 72 #Region '.\Public\New-TopdeskKnowledgeItemAttachment.ps1' 0 function New-TopdeskKnowledgeItemAttachment { [CmdletBinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()][ValidateNotNullOrEmpty()][string]$filepath, [Parameter()][ValidateNotNullOrEmpty()][string]$description ) $endpoint = "/tas/api/knowledgeItems/$($id)/attachments" $header = $global:topdeskHeader.Clone() $header."content-type" = "multipart/form-data" $form = @{ file = Get-Item $filepath description = $description } try{ Get-TopdeskAPIResponse -endpoint $endpoint -Method Post -headers $header -form $form -AllowInsecureRedirect -Verbose:$VerbosePreference | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskKnowledgeItemAttachment.ps1' 22 #Region '.\Public\New-TopdeskKnowledgeItemImage.ps1' 0 function New-TopdeskKnowledgeItemImage { [cmdletbinding()] param( [Alias("id")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$identifier, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$filepath ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($identifier)/images" $header = $global:topdeskHeader.Clone() $header."content-type" = "multipart/form-data" $form = @{ file = Get-Item $filepath } try{ Get-TopdeskAPIResponse -endpoint $endpoint -Method Post -headers $header -form $form -AllowInsecureRedirect -Verbose:$VerbosePreference | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskKnowledgeItemImage.ps1' 20 #Region '.\Public\New-TopdeskKnowledgeItemStatues.ps1' 0 function New-TopdeskKnowledgeItemStatues{ [cmdletbinding()] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$name ) $endpoint = "/services/knowledge-base-v1/knowledgeItemStatuses" $body = @{ name = $name } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "POST" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskKnowledgeItemStatues.ps1' 18 #Region '.\Public\New-TopdeskKnowledgeItemTranslation.ps1' 0 function New-TopdeskKnowledgeItemTranslation { [cmdletbinding()] param( [Alias("identifier")] [Parameter(Mandatory = $true, ParameterSetName = 'body')] [Parameter(Mandatory = $true, ParameterSetName = 'Title')] [ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = 'body')][PSCustomObject]$body, [Parameter(ParameterSetName = 'Title')][string]$language = "en-CA", [Parameter(Mandatory = $true, ParameterSetName = 'Title')][string]$title, [Parameter(ParameterSetName = 'Title')][string]$description, [Parameter(ParameterSetName = 'Title')][string]$content, [Parameter(ParameterSetName = 'Title')][string]$commentsForOperators, [Parameter(ParameterSetName = 'Title')][string]$keywords ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/translations" if (-not $PSBoundParameters.ContainsKey("body")) { $body = @{ language = $language content = @{ title = $title description = $description content = $content commentsForOperators = $commentsForOperators keywords = $keywords } } } try { $header = $global:topdeskHeader.Clone() $header."content-type" = "application/x.topdesk-kb-create-translation-v1+json" Get-TopdeskAPIResponse -endpoint $endpoint -headers $header -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -AllowInsecureRedirect Write-Verbose "Created knowledgeitem translation." } catch { throw $_ } } #EndRegion '.\Public\New-TopdeskKnowledgeItemTranslation.ps1' 40 #Region '.\Public\New-TopdeskQR.ps1' 0 function New-TopdeskQR{ [CmdletBinding()] param( [Parameter()][string]$format = "QR_CODE", [Parameter()][int]$width = 400, [Parameter()][int]$height = 400, [Parameter()][string]$imageType = "PNG", [Parameter(Mandatory = $true)][string]$text, [Parameter()][string]$header, [Parameter()][string]$footer, [Parameter(Mandatory = $true)][string]$downloadFile ) $endpoint = "/solutions/multi-barcode-creator-1/qr" $body = @{ metadata = @{ format = $format width = $width height = $height imageType = $imageType } content = @{ text = $text } } if ($PSBoundParameters.ContainsKey("header")) { $body.content.Add("header", $header) } if ($PSBoundParameters.ContainsKey("footer")) { $body.content.Add("footer", $footer) } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" -downloadFile $downloadFile | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskQR.ps1' 39 #Region '.\Public\New-TopdeskTaskNotification.ps1' 0 function New-TopdeskTaskNotification{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$title, [Parameter(Mandatory = $true)][string]$body, [Parameter()][string]$url, [Parameter()][string[]]$operatorIds, [Parameter()][string[]]$operatorGroupIds ) $endpoint = "/tas/api/tasknotifications/custom" $task = @{ title = $title body = $body } if ($PSBoundParameters.ContainsKey("url")){ $task.Add("url", $url) | Out-Null } if ($PSBoundParameters.ContainsKey("operatorIds")){ $task.Add("operatorIds", $operatorIds) | Out-Null } if ($PSBoundParameters.ContainsKey("operatorGroupIds")){ $task.Add("operatorGroupIds", $operatorGroupIds) | Out-Null } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($task | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\New-TopdeskTaskNotification.ps1' 32 #Region '.\Public\Remove-TopdeskAssetAssignments.ps1' 0 <# .DESCRIPTION .PARAMETER type Type of the linked entity .PARAMETER targetId Id of the linked entity. .PARAMETER assetids The ID of the asset .PARAMETER linkId The ID of the assignment #> function Remove-TopdeskAssetAssignments{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true,ParameterSetName = 'POST')][ValidateSet("branch", "location", "personGroup","person")][string]$type, [Parameter(Mandatory = $true,ParameterSetName = 'POST')][ValidateNotNullOrEmpty()][string]$targetId, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string[]]$assetids, [Parameter(Mandatory = $true,ParameterSetName = 'DELETE')][ValidateNotNullOrEmpty()][string]$linkId ) $vars = @{ Verbose = $VerbosePreference } switch($PSCmdlet.ParameterSetName){ "POST" { $vars.Method = "POST" $vars.endpoint = "/tas/api/assetmgmt/assets/unlink/$($type)/$($targetId)" $vars.body = @{ assetIds = $assetids } | ConvertTo-Json } "DELETE" { $vars.Method = "DELETE" $vars.endpoint = "/tas/api/assetmgmt/assets/$($assetids)/assignments/$($linkId)" } } try{ $results = Get-TopdeskAPIResponse @vars } catch{ throw $_ } return $results.Results } #EndRegion '.\Public\Remove-TopdeskAssetAssignments.ps1' 46 #Region '.\Public\Remove-TopdeskAssetField.ps1' 0 <# .DESCRIPTION .PARAMETER fieldId Id of the field #> function Remove-TopdeskAssetField{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$fieldid ) $endpoint = "/tas/api/assetmgmt/fields/$($fieldId)" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Delete" | Out-Null Write-Verbose "Deleted asset field with id $($fieldid) from system." } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskAssetField.ps1' 22 #Region '.\Public\Remove-TopdeskAssetUpload.ps1' 0 function Remove-TopdeskAssetUpload{ [CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$uploadId ) $endpoint = "/tas/api/assetmgmt/uploads/$($uploadId)" try{ Get-TopdeskAPIResponse -endpoint $endpoint -Method "Delete" -Verbose:$VerbosePreference } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskAssetUpload.ps1' 14 #Region '.\Public\Remove-TopdeskIncidentAction.ps1' 0 function Remove-TopdeskIncidentAction{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter(Mandatory = $true)][string]$actionid ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/actions/$($actionid)" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/actions/$($actionid)" } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Delete" | Out-Null Write-Verbose "Deleted action entry with id $($actionid)." } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskIncidentAction.ps1' 23 #Region '.\Public\Remove-TopdeskIncidentAttachment.ps1' 0 function Remove-TopdeskIncidentAttachment{ [CmdletBinding()] param( [Alias("incidentid")][Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Alias("incidentnumber")][Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$attachmentid ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/attachments/$($attachmentid)" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/attachments/$($attachmentid)" } try { Get-TopdeskAPIResponse -endpoint $endpoint -Method Delete -Verbose:$VerbosePreference | Out-Null } catch { throw $_ } } #EndRegion '.\Public\Remove-TopdeskIncidentAttachment.ps1' 21 #Region '.\Public\Remove-TopdeskIncidentRequest.ps1' 0 function Remove-TopdeskIncidentRequest{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter(Mandatory = $true)][string]$requestid ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/requests/$($requestid)" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/requests/$($requestid)" } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Delete" | Out-Null Write-Verbose "Deleted action entry with id $($requestid)." } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskIncidentRequest.ps1' 23 #Region '.\Public\Remove-TopdeskKnowledgeItemAtttachment.ps1' 0 function Remove-TopdeskKnowledgeItemAtttachment{ [CmdletBinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$attachmentIdentifier ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/attachments/$($attachmentIdentifier)" try { Get-TopdeskAPIResponse -endpoint $endpoint -Method Delete -Verbose:$VerbosePreference | Out-Null } catch { throw $_ } } #EndRegion '.\Public\Remove-TopdeskKnowledgeItemAtttachment.ps1' 15 #Region '.\Public\Remove-TopdeskKnowledgeItemBranchesLink.ps1' 0 function Remove-TopdeskKnowledgeItemBranchesLink{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$branchid ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/branches/unlink" $body = @{ "id" = $branchid } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskKnowledgeItemBranchesLink.ps1' 20 #Region '.\Public\Remove-TopdeskKnowledgeItemImage.ps1' 0 function Remove-TopdeskKnowledgeItemImage { [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$imagename ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/images/$($imagename)" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Delete" | Out-Null Write-Verbose "Deleted knowledge item image$($imagename) from KI $($id)." } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskKnowledgeItemImage.ps1' 17 #Region '.\Public\Remove-TopdeskKnowledgeItemTranslation.ps1' 0 function Remove-TopdeskKnowledgeItemTranslation{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][string]$language ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/translations/$($language)" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Delete" | Out-Null Write-Verbose "Deleted translation entry with language $($language)." } catch{ throw $_ } } #EndRegion '.\Public\Remove-TopdeskKnowledgeItemTranslation.ps1' 17 #Region '.\Public\Send-TopdeskEmail.ps1' 0 function Send-TopdeskEmail { [CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$from, [Parameter(Mandatory = $true)][string[]]$to, [Parameter()][string[]]$cc, [Parameter()][string[]]$bcc, [Parameter()][string]$replyTo, [Parameter(Mandatory = $true)][string]$subject, [Parameter(Mandatory = $true)][string]$body, [Parameter()][switch]$isHtmlBody, [Parameter()][int]$priority = 3, [Parameter()][switch]$requestDeliveryReceipt, [Parameter()][switch]$requestReadReceipt, [Parameter()][switch]$issuppressAutomaticReplies, [Parameter()][string]$attachments ) $endpoint = "/services/email-v1/api/send" $mail = @{ from = $from to = ($to -join ",") subject = $subject body = $body isHtmlBody = $isHtmlBody.IsPresent priority = $priority requestDeliveryReceipt = $requestDeliveryReceipt.IsPresent requestReadReceipt = $requestReadReceipt.IsPresent issuppressAutomaticReplies = $issuppressAutomaticReplies.IsPresent } if ($PSBoundParameters.ContainsKey("cc")){ $mail.Add("cc", ($cc -join ",")) | Out-Null } if ($PSBoundParameters.ContainsKey("bcc")){ $mail.Add("bcc", ($bcc -join ",")) | Out-Null } if ($PSBoundParameters.ContainsKey("replyTo")){ $mail.Add("replyTo", $replyTo) | Out-Null } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($mail | ConvertTo-Json) -Verbose:$VerbosePreference -Method "post" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Send-TopdeskEmail.ps1' 47 #Region '.\Public\Set-TopdeskAssetAssignments.ps1' 0 <# .DESCRIPTION .PARAMETER assetids is an asset, stock or bulk item ID array. Multiple values of the array is supported .PARAMETER linkType is the type of the target card - branch, location for assets, stocks and bulk items while person, personGroup is only for assets .PARAMETER linkToId is the ID of the target card .PARAMETER branchId is the parent branch ID of the location. #> function Set-TopdeskAssetAssignments{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] [Alias("Add-TopdeskAssetAssignment")] param( [Alias("assetid")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string[]]$assetids, [Parameter()][ValidateSet("branch", "location", "personGroup","person")][string]$linkType = "branch", [Alias("locationID")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$linkToId, [Parameter()][ValidateNotNullOrEmpty()][string]$branchId ) $vars = @{ Method = "PUT" Verbose = $VerbosePreference } $body = @{ linkType = $linkType linkToId = $linktoid } if($PSBoundParameters.ContainsKey("branchId")){ $body.branchId = $branchId } if($assetids.count -gt 1){ $vars.endpoint = "/tas/api/assetmgmt/assets/assignments" $body.assetIds = $assetids } else{ $vars.endpoint = "/tas/api/assetmgmt/assets/$($assetids)/assignments" } $vars.body = $body | ConvertTo-Json try{ $results = Get-TopdeskAPIResponse @vars } catch{ throw $_ } return $results.Results } #EndRegion '.\Public\Set-TopdeskAssetAssignments.ps1' 50 #Region '.\Public\Set-TopdeskHeader.ps1' 0 <# .DESCRIPTION This will set the header information for the topdesk API calls that will be used in the future. These are stored in a global variable so that they can be used both in other functions and scripts. .PARAMETER credential The credential object that will be used to authenticate with the Topdesk API. .PARAMETER username The username that will be used to authenticate with the Topdesk API. .PARAMETER password The password that will be used to authenticate with the Topdesk API. This is a secure string. .PARAMETER tenant The tenant that will be used to authenticate with the Topdesk API. It also has an alias for backwards compat for environment .EXAMPLE Create the header information with a credential object Set-TopdeskHeader -credential $credential -tenant "test-tenant" Create the header information with a username and password Set-TopdeskHeader -username "test-user" -password "test-password" -tenant "test-tenant" #> function Set-TopdeskHeader { [CmdletBinding()] [Alias("Connect-Topdesk")] param( [Parameter(Mandatory = $true, ParameterSetName = "credentialObject")][ValidateNotNullOrEmpty()][pscredential]$credential, [Parameter(Mandatory = $true, ParameterSetName = "usernamePassword")][ValidateNotNullOrEmpty()][string]$username, [Parameter(Mandatory = $true, ParameterSetName = "usernamePassword")][ValidateNotNullOrEmpty()][securestring]$password, [Alias("environment")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$tenant, [Parameter()][ValidateNotNullOrEmpty()][string]$contentType = "application/json" ) # Deterime if we are are using the credential object or passed username and password if($PSCmdlet.ParameterSetName -eq "credentialObject"){ $username = $credential.UserName $password = $credential.Password } $pass = ConvertFrom-SecureString -SecureString $password -AsPlainText # Create Topdesk header information that will be used with further API Calls $global:topdeskHeader = @{ "Authorization" = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($username):$($pass)")))" "Content-Type" = $contentType } # This sets a variable for the enviorment $global:topdeskAPIEndpoint = "https://$($tenant).topdesk.net" } #EndRegion '.\Public\Set-TopdeskHeader.ps1' 42 #Region '.\Public\Set-TopdeskIncident.ps1' 0 function Set-TopdeskIncident{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = 'id')][string]$id, [Parameter(Mandatory = $true, ParameterSetName = 'number')][string]$number, [Parameter()][ValidateNotNullOrEmpty()][PSCustomObject]$body, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_branch_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_dynamicName, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_phoneNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_mobileNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_email, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_department_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_department_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_location_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_budgetHolder_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_budgetHolder_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldA_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldA_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldB_id, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_personExtraFieldB_name, [Parameter()][ValidateNotNullOrEmpty()][string]$caller_callerLookup_id, [Parameter()][ValidateNotNullOrEmpty()][string]$status, [Parameter()][ValidateNotNullOrEmpty()][string]$briefDescription, [Parameter()][ValidateNotNullOrEmpty()][string]$request, [Parameter()][ValidateNotNullOrEmpty()][string]$action, [Parameter()][ValidateNotNullOrEmpty()][bool]$actionInvisibleForCaller, [Parameter()][ValidateNotNullOrEmpty()][string]$entryType_id, [Parameter()][ValidateNotNullOrEmpty()][string]$entryType_name, [Parameter()][ValidateNotNullOrEmpty()][string]$callType_id, [Parameter()][ValidateNotNullOrEmpty()][string]$callType_name, [Parameter()][ValidateNotNullOrEmpty()][string]$category_id, [Parameter()][ValidateNotNullOrEmpty()][string]$category_name, [Parameter()][ValidateNotNullOrEmpty()][string]$subcategory_id, [Parameter()][ValidateNotNullOrEmpty()][string]$subcategory_name, [Parameter()][ValidateNotNullOrEmpty()][string]$externalNumber, [Parameter()][ValidateNotNullOrEmpty()][string]$object_id, [Parameter()][ValidateNotNullOrEmpty()][string]$object_name, [Parameter()][ValidateNotNullOrEmpty()][string]$location_id, [Parameter()][ValidateNotNullOrEmpty()][string]$branch_id, [Parameter()][ValidateNotNullOrEmpty()][string]$mainIncident_id, [Parameter()][ValidateNotNullOrEmpty()][string]$mainIncident_number, [Parameter()][ValidateNotNullOrEmpty()][string]$impact_id, [Parameter()][ValidateNotNullOrEmpty()][string]$impact_name, [Parameter()][ValidateNotNullOrEmpty()][string]$urgency_id, [Parameter()][ValidateNotNullOrEmpty()][string]$urgency_name, [Parameter()][ValidateNotNullOrEmpty()][string]$priority_id, [Parameter()][ValidateNotNullOrEmpty()][string]$priority_name, [Parameter()][ValidateNotNullOrEmpty()][string]$duration_id, [Parameter()][ValidateNotNullOrEmpty()][string]$duration_name, [Parameter()][ValidateNotNullOrEmpty()][datetime]$targetDate, [Parameter()][ValidateNotNullOrEmpty()][string]$sla_id, [Parameter()][ValidateNotNullOrEmpty()][bool]$onHold, [Parameter()][ValidateNotNullOrEmpty()][string]$operator_id, [Parameter()][ValidateNotNullOrEmpty()][string]$operatorGroup_id, [Parameter()][ValidateNotNullOrEmpty()][string]$supplier_id, [Parameter()][ValidateNotNullOrEmpty()][string]$processingStatus_id, [Parameter()][ValidateNotNullOrEmpty()][string]$processingStatus_name, [Parameter()][ValidateNotNullOrEmpty()][bool]$responded, [Parameter()][ValidateNotNullOrEmpty()][datetime]$responseDate, [Parameter()][ValidateNotNullOrEmpty()][bool]$completed, [Parameter()][ValidateNotNullOrEmpty()][datetime]$completedDate, [Parameter()][ValidateNotNullOrEmpty()][bool]$closed, [Parameter()][ValidateNotNullOrEmpty()][datetime]$closedDate, [Parameter()][ValidateNotNullOrEmpty()][string]$closureCode_id, [Parameter()][ValidateNotNullOrEmpty()][string]$closureCode_name, [Parameter()][ValidateNotNullOrEmpty()][decimal]$costs, [Parameter()][ValidateNotNullOrEmpty()][int]$feedbackRating, [Parameter()][ValidateNotNullOrEmpty()][string]$feedbackMessage, [Parameter()][ValidateNotNullOrEmpty()][bool]$majorCall, [Parameter()][ValidateNotNullOrEmpty()][string]$majorCallObject_id, [Parameter()][ValidateNotNullOrEmpty()][string]$majorCallObject_number, [Parameter()][ValidateNotNullOrEmpty()][bool]$publishToSsd, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean1, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean2, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean3, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean4, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields1_boolean5, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number1, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number2, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number3, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number4, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields1_number5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_text5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_memo5, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date1, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date2, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date3, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date4, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields1_date5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist1_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist1_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist2_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist2_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist3_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist3_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist4_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist4_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist5_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields1_searchlist5_name, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean1, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean2, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean3, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean4, [Parameter()][ValidateNotNullOrEmpty()][bool]$optionalFields2_boolean5, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number1, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number2, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number3, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number4, [Parameter()][ValidateNotNullOrEmpty()][decimal]$optionalFields2_number5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_text5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo1, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo2, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo3, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo4, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_memo5, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date1, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date2, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date3, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date4, [Parameter()][ValidateNotNullOrEmpty()][datetime]$optionalFields2_date5, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist1_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist1_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist2_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist2_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist3_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist3_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist4_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist4_name, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist5_id, [Parameter()][ValidateNotNullOrEmpty()][string]$optionalFields2_searchlist5_name, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_id, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_type, [Parameter()][ValidateNotNullOrEmpty()][string]$externalLink_date ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)" } elseif ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)" } if (-not $PSBoundParameters.ContainsKey("body")) { $body = @{} foreach($item in $PsBoundParameters.GetEnumerator()){ if($item.key -in ("Verbose","id","number")){continue} $key = $item.Key.split("_") if($key.count -gt 1){ $parent = "" for($i = 0; $i -lt $key.count - 1; $i++){ if($i -eq 0){ if(!$body.ContainsKey($key[$i])){ $body.Add($key[$i],@{}) | Out-Null } $parent = $key[$i] } else{ $scriptBlock = " if(!`$body.$($parent).ContainsKey(`"$($key[$i])`")){ `$body.$($parent).Add(`"$($key[$i])`",@{}) | Out-Null } `$parent = `"$($parent).$($key[$i])`" " Invoke-Expression $scriptBlock } } $scriptBlock = " `$body.$($parent).Add(`"$($key[$i])`",`$item.value) " Invoke-Expression $scriptBlock } else{ if(!$body.ContainsKey($item.Key)){ $body.Add($item.Key,$item.Value) | Out-Null } } } } try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method "PUT" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -AllowInsecureRedirect Write-Verbose "Updating incident." } catch { throw $_ } return $results.results } #EndRegion '.\Public\Set-TopdeskIncident.ps1' 199 #Region '.\Public\Set-TopdeskIncidentArchive.ps1' 0 function Set-TopdeskIncidentArchive{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$reason ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/archive" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/archive" } $body = @{ "name" = $reason } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "Put" | Out-Null Write-Verbose "Archived incident id $($number)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskIncidentArchive.ps1' 26 #Region '.\Public\Set-TopdeskIncidentDeescalation.ps1' 0 function Set-TopdeskIncidentDeescalation{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter()][ValidateNotNullOrEmpty()][string]$reason, [Parameter()][ValidateNotNullOrEmpty()][string]$reasonid ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/deescalate" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/deescalate" } if ($PSBoundParameters.ContainsKey("reason")) { $body = @{"name" = $reason} } if ($PSBoundParameters.ContainsKey("reasonid")) { $body = @{"id" = $reasonid} } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "Put" | Out-Null Write-Verbose "Deescanted incident id $($number)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskIncidentDeescalation.ps1' 30 #Region '.\Public\Set-TopdeskIncidentEscalation.ps1' 0 function Set-TopdeskIncidentEscalation{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number, [Parameter()][ValidateNotNullOrEmpty()][string]$reason, [Parameter()][ValidateNotNullOrEmpty()][string]$reasonid ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/escalate" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/escalate" } if ($PSBoundParameters.ContainsKey("reason")) { $body = @{"name" = $reason} } if ($PSBoundParameters.ContainsKey("reasonid")) { $body = @{"id" = $reasonid} } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "Put" | Out-Null Write-Verbose "Escanted incident id $($number)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskIncidentEscalation.ps1' 30 #Region '.\Public\Set-TopdeskIncidentUnarchive.ps1' 0 function Set-TopdeskIncidentUnarchive{ [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "id")][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true, ParameterSetName = "number")][ValidateNotNullOrEmpty()][string]$number ) if ($PSBoundParameters.ContainsKey("id")) { $endpoint = "/tas/api/incidents/id/$($id)/unarchive" } if ($PSBoundParameters.ContainsKey("number")) { $endpoint = "/tas/api/incidents/number/$($number)/unarchive" } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "Put" | Out-Null Write-Verbose "Unarchived incident id $($number)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskIncidentUnarchive.ps1' 22 #Region '.\Public\Set-TopdeskKnowledgeItemArchive.ps1' 0 function Set-TopdeskKnowledgeItemArchive{ [CmdletBinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/archive" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "POST" | Out-Null Write-Verbose "Archived KI id $($id)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskKnowledgeItemArchive.ps1' 16 #Region '.\Public\Set-TopdeskKnowledgeItemStatusArchive.ps1' 0 function Set-TopdeskKnowledgeItemStatusArchive{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) $endpoint = "/services/knowledge-base-v1/knowledgeItemStatuses/$($id)/archive" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "POST" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskKnowledgeItemStatusArchive.ps1' 15 #Region '.\Public\Set-TopdeskKnowledgeItemStatusUnarchive.ps1' 0 function Set-TopdeskKnowledgeItemStatusUnarchive{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) $endpoint = "/services/knowledge-base-v1/knowledgeItemStatuses/$($id)/unarchive" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -Verbose:$VerbosePreference -Method "POST" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskKnowledgeItemStatusUnarchive.ps1' 15 #Region '.\Public\Set-TopdeskKnowledgeItemUnarchive.ps1' 0 function Set-TopdeskKnowledgeItemUnarchive{ [CmdletBinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/unarchive" try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "POST" | Out-Null Write-Verbose "Unarchived KI id $($id)." } catch{ throw $_ } } #EndRegion '.\Public\Set-TopdeskKnowledgeItemUnarchive.ps1' 16 #Region '.\Public\Set-TopdeskPersonArchive.ps1' 0 function Set-TopdeskPersonArchive{ [cmdletbinding()] [OutputType([System.Collections.Generic.List[PSCustomObject]])] param( [Parameter(Mandatory = $true)][string]$id, [Parameter()][string]$reason_id ) $endpoint = "/tas/api/persons/id/$($id)/archive" $body = @{} if ($PSBoundParameters.ContainsKey("reason_id")) { $body.Add("id",$reason_id) } try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method PUT -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference } catch { throw $_ } return $results.results } #EndRegion '.\Public\Set-TopdeskPersonArchive.ps1' 21 #Region '.\Public\Set-TopdeskPersonsContract.ps1' 0 function Set-TopdeskPersonsContract { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][string]$id, [Parameter()][datetime]$hireDate, [Parameter()][datetime]$employmentTerminationDate, [Parameter()][datetime]$contractStartDate, [Parameter()][datetime]$contractExpiryDate, [Parameter()][datetime]$endProbationPeriod ) $endpoint = "/tas/api/persons/id/$($id)/contract" $body = @{} if ($PSBoundParameters.ContainsKey("hireDate")) { $body.Add("hireDate", $hireDate) } if ($PSBoundParameters.ContainsKey("employmentTerminationDate")) { $body.Add("employmentTerminationDate", $employmentTerminationDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($PSBoundParameters.ContainsKey("contractStartDate")) { $body.Add("contractStartDate", $contractStartDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($PSBoundParameters.ContainsKey("contractExpiryDate")) { $body.Add("contractExpiryDate", $contractExpiryDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($PSBoundParameters.ContainsKey("endProbationPeriod")) { $body.Add("endProbationPeriod", $endProbationPeriod.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } try { if($body.count -gt 0){ $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method PATCH -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference } } catch { throw $_ } return $results.results } #EndRegion '.\Public\Set-TopdeskPersonsContract.ps1' 29 #Region '.\Public\Set-TopdeskPersonsPrivateDetails.ps1' 0 function Set-TopdeskPersonsPrivateDetails{ [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][string]$id, [Parameter()][string]$privatePhoneNumber1, [Parameter()][string]$privatePhoneNumber2, [Parameter()][string]$privateMobilePhoneNumber, [Parameter()][string]$privateFaxNumber, [Parameter()][string]$socialSecurityNumber, [Parameter()][string]$privateEmail, [Parameter()][string]$country, [Parameter()][string]$street, [Parameter()][string]$number, [Parameter()][string]$county, [Parameter()][string]$city, [Parameter()][string]$postcode, [Parameter()][string]$addressMemo ) $endpoint = "/tas/api/persons/id/$($id)/privateDetails" $body = @{} $address = @{} if ($PSBoundParameters.ContainsKey("privatePhoneNumber1")) { $body.Add("privatePhoneNumber1",$privatePhoneNumber1)} if ($PSBoundParameters.ContainsKey("privatePhoneNumber2")) { $body.Add("privatePhoneNumber2",$privatePhoneNumber2)} if ($PSBoundParameters.ContainsKey("privateMobilePhoneNumber")) { $body.Add("privateMobilePhoneNumber",$privateMobilePhoneNumber)} if ($PSBoundParameters.ContainsKey("privateFaxNumber")) { $body.Add("privateFaxNumber",$privateFaxNumber)} if ($PSBoundParameters.ContainsKey("socialSecurityNumber")) { $body.Add("socialSecurityNumber",$privateFaxNumber)} if ($PSBoundParameters.ContainsKey("privateEmail")) { $body.Add("privateEmail",$privateFaxNumber)} if ($PSBoundParameters.ContainsKey("country")) { $address.Add("country",$country)} if ($PSBoundParameters.ContainsKey("street")) { $address.Add("street",$street)} if ($PSBoundParameters.ContainsKey("number")) { $address.Add("number",$number)} if ($PSBoundParameters.ContainsKey("city")) { $address.Add("city",$city)} if ($PSBoundParameters.ContainsKey("postcode")) { $address.Add("postcode",$postcode)} if ($PSBoundParameters.ContainsKey("addressMemo")) { $address.Add("addressMemo",$addressMemo)} if($address.count -gt 0){ $body.Add("address",$address) } try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method PATCH -body ($body | ConvertTo-Json) -Verbose:$VerbosePreference } catch { throw $_ } return $results.results } #EndRegion '.\Public\Set-TopdeskPersonsPrivateDetails.ps1' 46 #Region '.\Public\Set-TopdeskPersonUnArchive.ps1' 0 function Set-TopdeskPersonUnArchive { [CmdletBinding()] [OutputType([System.Collections.Generic.List[PSObject]])] param( [Parameter(Mandatory = $true)][string]$id ) $endpoint = "/tas/api/persons/id/$($id)/unarchive" try { $results = Get-TopdeskAPIResponse -endpoint $endpoint -Method PUT -Verbose:$VerbosePreference } catch { throw $_ } return $results.results } #EndRegion '.\Public\Set-TopdeskPersonUnArchive.ps1' 16 #Region '.\Public\Update-TopdeskAsset.ps1' 0 function Update-TopdeskAsset{ [CmdletBinding()] param( [Alias("unid")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$assetId, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][hashtable]$update ) # The endpoint to get assets $endpoint = "/tas/api/assetmgmt/assets/$($assetId)" try{ Get-TopdeskAPIResponse -endpoint $endpoint -Method "POST" -body ($update | ConvertTo-JSON) -Verbose:$VerbosePreference | Out-Null Write-Verbose "Updating asset with id $($assetId) from system." } catch{ throw $_ } } #EndRegion '.\Public\Update-TopdeskAsset.ps1' 17 #Region '.\Public\Update-TopdeskKnowledgeItem.ps1' 0 function Update-TopdeskKnowledgeItem { [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()]$body, [Parameter()][string]$parent, [Parameter()][ValidateSet("NOT_VISIBLE", "VISIBLE", "VISIBLE_IN_PERIOD")][string]$sspVisibility = "NOT_VISIBLE", [Parameter()][datetime]$sspVisibleFrom, [Parameter()][datetime]$sspVisibleUntil, [Parameter()][bool]$sspVisibilityFilteredOnBranches = $false, [Parameter()][bool]$operatorVisibilityFilteredOnBranches = $false, [Parameter()][bool]$openKnowledgeItem, [Parameter()][string]$status, [Parameter()][string]$manager, [Parameter()][string]$externalLinkid, [Parameter()][string]$externalLinktype, [Parameter()][datetime]$externalLinkdate ) # The endpoint to get assets $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)" if (-not $PSBoundParameters.ContainsKey("body")) { # Create blank body $body = @{} # Add the parent if it exists if ($PSBoundParameters.ContainsKey("parent")) { $body.Add("parent", @{number = $parent }) } # Create blank visibility hash to add if required $visibility = @{ operatorVisibilityFilteredOnBranches = $operatorVisibilityFilteredOnBranches sspVisibilityFilteredOnBranches = $sspVisibilityFilteredOnBranches sspVisibility = $sspVisibility } if ($PSBoundParameters.ContainsKey("sspVisibleFrom")) { $visibility.Add("sspVisibleFrom", $sspVisibleFrom.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($PSBoundParameters.ContainsKey("sspVisibleUntil")) { $visibility.Add("sspVisibleUntil", $sspVisibleUntil.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($PSBoundParameters.ContainsKey("openKnowledgeItem")) { $visibility.Add("openKnowledgeItem", $openKnowledgeItem) } if ($visibility.count -ne 0) { $body.Add("visibility", $visibility) } if ($PSBoundParameters.ContainsKey("status")) { $body.Add("status", @{id = $status }) } if ($PSBoundParameters.ContainsKey("manager")) { $body.Add("manager", @{id = $manager }) } # Create blank externalLink hash to add if required $externalLink = @{} if ($PSBoundParameters.ContainsKey("externalLinkid")) { $externalLink.Add("id", $externalLinkid) } if ($PSBoundParameters.ContainsKey("externalLinktype")) { $externalLink.Add("type", $externalLinktype) } if ($PSBoundParameters.ContainsKey("externalLinkdate")) { $externalLink.Add("date", $externalLinkdate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")) } if ($externalLink.count -ne 0) { $body.Add("externalLink", $externalLink) } } try { Get-TopdeskAPIResponse -endpoint $endpoint -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference | Out-Null Write-Verbose "Updating knowledgeitem with id $($id) from system." } catch { throw $_ } } #EndRegion '.\Public\Update-TopdeskKnowledgeItem.ps1' 75 #Region '.\Public\Update-TopdeskKnowledgeItemStatues.ps1' 0 function Update-TopdeskKnowledgeItemStatues{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$name ) $endpoint = "/services/knowledge-base-v1/knowledgeItemStatuses/$($id)" $body = @{ name = $name } try{ # Execute API Call Get-TopdeskAPIResponse -endpoint $endpoint -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference -Method "PATCH" | Out-Null } catch{ throw $_ } } #EndRegion '.\Public\Update-TopdeskKnowledgeItemStatues.ps1' 19 #Region '.\Public\Update-TopdeskKnowledgeItemTranslation.ps1' 0 function Update-TopdeskKnowledgeItemTranslation{ [cmdletbinding()] param( [Alias("identifier")][Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string]$id, [Parameter()][string]$language = "en-CA", [Parameter(Mandatory = $true, ParameterSetName = 'body')][PSCustomObject]$body, [Parameter(ParameterSetName = 'Title')][string]$title, [Parameter(ParameterSetName = 'Title')][string]$description, [Parameter(ParameterSetName = 'Title')][string]$content, [Parameter(ParameterSetName = 'Title')][string]$commentsForOperators, [Parameter(ParameterSetName = 'Title')][string]$keywords ) $endpoint = "/services/knowledge-base-v1/knowledgeItems/$($id)/translations/$($language)" if (-not $PSBoundParameters.ContainsKey("body")){ $body = @{} if ($PSBoundParameters.ContainsKey("title")){$body.Add("title",$title) | Out-Null} if ($PSBoundParameters.ContainsKey("description")){$body.Add("description",$description) | Out-Null} if ($PSBoundParameters.ContainsKey("content")){$body.Add("content",$content) | Out-Null} if ($PSBoundParameters.ContainsKey("commentsForOperators")){$body.Add("commentsForOperators",$commentsForOperators) | Out-Null} if ($PSBoundParameters.ContainsKey("keywords")){$body.Add("keywords",$keywords) | Out-Null} } try{ Get-TopdeskAPIResponse -endpoint $endpoint -Method "POST" -body ($body | ConvertTo-JSON) -Verbose:$VerbosePreference | Out-Null Write-Verbose "Updating knowledgeitem with id $($id) from system." } catch{ throw $_ } } #EndRegion '.\Public\Update-TopdeskKnowledgeItemTranslation.ps1' 30 |