JSM.Insight.psm1
#region Private functions function New-Headers { param ( [string]$InsightCreds = $InsightCreds, [switch]$ExperimentalApi ) Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]' $Headers.Add('content-type' , 'application/json') $Headers.Add('Authorization', 'Basic ' + $InsightCreds) if ($ExperimentalApi -eq $true) { $Headers.Add('X-ExperimentalApi', 'opt-in') } $Headers } #endregion #region Public functions # https://developer.atlassian.com/cloud/insight/rest/api-group-icon/#api-icon-id-get function Get-Icon { [CmdletBinding()] param ( [String]$Version = "1", [string]$IconID = "global", [switch]$Full, [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { # Default is Global which will show all icons. $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/icon/$IconID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } if ($Full -eq $true) { $response } else { $response | Select id,name } Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } Function Get-InsightCreds { [CmdletBinding()] [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseShouldProcessForStateChangingFunctions', '')] param( [Parameter( Mandatory )] [ValidateNotNullOrEmpty()] [Alias('user')] [string]$Username, [Parameter( Mandatory )] [ValidateNotNullOrEmpty()] [Alias('pass')] [string]$Password ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" } process { #Encode Creds $auth = $username + ':' + $password $Encoded = [System.Text.Encoding]::UTF8.GetBytes($auth) $authorizationInfo = [System.Convert]::ToBase64String($Encoded) $Script:InsightCreds = $authorizationInfo } end { $authorizationInfo Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Get-InsightWorkspaceID { [CmdletBinding()] param ( [string]$InsightServerUrl, [string]$InsightCreds = $InsightCreds ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers -ExperimentalApi } process { $Request = [System.UriBuilder]"$InsightServerUrl/rest/servicedeskapi/insight/workspace" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET $script:InsightWorkspaceID = $response.values.workspaceId $response.values.workspaceId } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" } Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-object/#api-object-id-attributes-get function Get-ObjectAttributes { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id/attributes" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-object/#api-object-id-get function Get-ObjectByID { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-objectconnectedtickets/#api-objectconnectedtickets-objectid-tickets-get function Get-ObjectConnectedTickets { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectconnectedtickets/$id/tickets" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-object/#api-object-id-history-get function Get-ObjectHistory { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id/history" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-object/#api-object-id-referenceinfo-get function Get-ObjectReferenceInfo { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id/referenceinfo" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-objectschema/#api-objectschema-id-get function Get-ObjectSchema { [CmdletBinding()] param ( [string]$ID, [String]$Version = '1', [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Get-ObjectSchemaAttributes { [CmdletBinding()] param ( [string]$ID, [bool]$onlyValueEditable = $False, [bool]$extended = $False, [string]$Query, [String]$Version = '1', [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ } if ($onlyValueEditable) { $RequestBody.Add('onlyValueEditable',$onlyValueEditable) } if ($extended) { $RequestBody.Add('extended',$extended) } if ($Query) { $RequestBody.Add('query',$Query) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/$id/attributes" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Get-ObjectSchemaList { [CmdletBinding()] param ( [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/list" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Get-ObjectSchemaObjectTypes { [CmdletBinding()] param ( [string]$ID, [String]$Version = '1', [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/$id/objecttypes/flat" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Get-ObjectType { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # API Docs need info on how to add Query parameters. # https://developer.atlassian.com/cloud/insight/rest/api-group-objecttype/#api-objecttype-id-attributes-get function Get-ObjectTypeAttributes { [CmdletBinding()] param ( [string]$ID, [switch]$onlyValueEditable, [switch]$orderByName, [string]$query, [switch]$includeValuesExist, [switch]$excludeParentAttributes, [switch]$includeChildren, [switch]$orderByRequired, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/$id/attributes" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } #https://developer.atlassian.com/cloud/insight/rest/api-group-progress/#api-progress-category-imports-id-get function Get-ProgressCatagoryImports { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/progress/category/imports/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-config/#api-config-statustype-get function Get-StatusTypeByID { [CmdletBinding()] param ( [String]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/config/statustype/$ID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-config/#api-config-statustype-get function Get-StatusTypes { [CmdletBinding()] param ( [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/config/statustype/" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method GET } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function New-AttributeArray { [CmdletBinding()] param ( [ValidateNotNullOrEmpty()] [Parameter(Mandatory = $true,valuefrompipelinebypropertyname = $true)] [int]$AttributeId, [ValidateNotNullOrEmpty()] [Parameter(Mandatory = $true,valuefrompipelinebypropertyname = $true)] [String[]]$AttributeValues ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $values = New-Object System.Collections.ArrayList } process { $AttributeValues | ForEach-Object { $values.Add(@{'value' = $_}) | Out-Null } $Attribute = @{ 'objectTypeAttributeId' = $AttributeId 'objectAttributeValues' = @($values) } } end { Write-Output $Attribute Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function New-ObjectByID { [CmdletBinding()] param ( [string]$ID, [string]$objectTypeId, [array]$attributesArray, [Bool]$hasAvatar, [string]$avatarUUID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ 'objectTypeId' = $objectTypeId 'attributes' = @($attributes) } $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function New-ObjectSchema { [CmdletBinding()] param ( [string]$Name, [string]$objectSchemaKey, [string]$Description, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ 'name' = $Name 'objectSchemaKey' = $objectSchemaKey } if ($Description) { $RequestBody.Add('description', $Description) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/create" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function New-ObjectType { [CmdletBinding()] param ( [string]$name, [string]$description, [string]$iconID, [string]$ObjectSchemaID, [string]$ParentObjectTypeID, [bool]$Inherited, [bool]$AbstractObjectType, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers $RequestBody = @{ 'name' = $Name 'iconId' = $iconID 'objectSchemaId' = $objectSchemaId } if ($Description) { $RequestBody.Add('description', $Description) } if ($parentObjectTypeId) { $RequestBody.Add('parentObjectTypeId', $parentObjectTypeId) } if ($Inherited -eq $true) { $RequestBody.Add('inherited', $Inherited) } if ($AbstractObjectType -eq $true) { $RequestBody.Add('abstractObjectType', $AbstractObjectType) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/create" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function New-ObjectTypeAttribute { [CmdletBinding()] param ( [string]$ObjectTypeId, [string]$Name, [string]$Label, [string]$Description, [ValidateSet("Default","Object Reference","User","Group","Status")] [string]$Type, [ValidateSet("None","Text","Integer","Boolean","Double","Date","Time","DateTime","URL","Email","TextArea","Select","IP Address")] [string]$defaultTypeId, [string]$typeValue, [array]$typeValueMulti, [string]$additionalValue, [int]$minimumCardinality, [int]$maximumCardinality, [string]$suffix, [bool]$includeChildObjectTypes, [bool]$hidden, [bool]$uniqueAttribute, [bool]$summable, [string]$regexValidation, [string]$iql, [string]$options, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers $ConvertedType = switch ($Type) { "Default" { 0 } "Object Reference" { 1 } "User" { 2 } "Group" { 4 } "Status" { 7 } } $ConvertedTypeID = switch ($defaultTypeId) { "None" { -1 } "Text" { 0 } "Integer" { 1 } "Boolean" { 2 } "Double" { 3 } "Date" { 4 } "Time" { 5 } "DateTime" { 6 } "URL" { 7 } "Email" { 8 } "TextArea" { 9 } "Select" { 10 } "IP Address" { 11 } } $RequestBody = @{ 'name' = $Name 'type' = $ConvertedType } if ($Label) { $RequestBody.Add('label', $Label) } if ($Description) { $RequestBody.Add('description', $Description) } if ($ConvertedTypeID) { $RequestBody.Add('defaultTypeId', $ConvertedTypeID) } if ($typeValue) { $RequestBody.Add('typeValue', $typeValue) } if ($typeValueMulti) { $RequestBody.Add('typeValueMulti', $typeValueMulti) } if ($additionalValue) { $RequestBody.Add('additionalValue', $additionalValue) } if ($minimumCardinality) { $RequestBody.Add('minimumCardinality', $minimumCardinality) } if ($maximumCardinality) { $RequestBody.Add('maximumCardinality', $maximumCardinality) } if ($suffix) { $RequestBody.Add('suffix', $suffix) } if ($includeChildObjectTypes -eq $true) { $RequestBody.Add('includeChildObjectTypes', $includeChildObjectTypes) } if ($hidden -eq $true) { $RequestBody.Add('hidden', $hidden) } if ($uniqueAttribute -eq $true) { $RequestBody.Add('uniqueAttribute', $uniqueAttribute) } if ($summable -eq $true) { $RequestBody.Add('summable', $summable) } if ($regexValidation) { $RequestBody.Add('regexValidation', $regexValidation) } if ($iql) { $RequestBody.Add('iql', $iql) } if ($options) { $RequestBody.Add('options', $options) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttypeattribute/$ObjectTypeId" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-config/#api-config-statustype-post function New-StatusType { [CmdletBinding()] param ( [String]$Name, [String]$Description, [ValidateSet("InActive\Red","Active\Green","Pending\Yellow")] [String]$Category, [String]$objectSchemaId, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers switch ($Category) { "InActive\Red" { 0 } "Active\Green" { 1 } "Pending\Yellow" { 2 } } $RequestBody = @{ 'name' = $Name 'category' = $Category } if ($Description) { $RequestBody.Add('description', $Description) } if ($objectSchemaId) { $RequestBody.Add('objectSchemaId', $objectSchemaId) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/config/statustype" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Remove-ObjectByID { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method DELETE } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Remove-ObjectSchema { [CmdletBinding()] param ( [string]$ID, [String]$Version = '1', [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method DELETE } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Remove-ObjectType { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method DELETE } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Remove-ObjectTypeAttribute { [CmdletBinding()] param ( [string]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttypeattribute/$ID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method DELETE } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-config/#api-config-statustype-get function Remove-StatusTypeByID { [CmdletBinding()] param ( [String]$ID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/config/statustype/$ID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method DELETE } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Set-ObjectByID { [CmdletBinding()] param ( [string]$ID, [string]$objectTypeId, [array]$attributesArray, [Bool]$hasAvatar, [string]$avatarUUID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ 'objectTypeId' = $objectTypeId 'attributes' = @($attributes) } $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method PUT } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Set-ObjectPosition { [CmdletBinding()] param ( [string]$ID, [string]$toObjectTypeId, [int]$position, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ 'position' = $position } if ($toObjectTypeId) { $RequestBody.Add('toObjectTypeId', $toObjectTypeId) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/$id/position" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Set-ObjectSchema { [CmdletBinding()] param ( [string]$ID, [string]$Name, [string]$objectSchemaKey, [string]$Description, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers } process { $RequestBody = @{ 'name' = $Name 'objectSchemaKey' = $objectSchemaKey } if ($Description) { $RequestBody.Add('description',$Description) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objectschema/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method POST } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Set-ObjectType { [CmdletBinding()] param ( [string]$ID, [string]$name, [string]$description, [string]$iconID, [string]$ObjectSchemaID, [string]$ParentObjectTypeID, [bool]$Inherited, [string]$AbstractObjectType, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers $RequestBody = @{ 'name' = $Name 'iconID' = $iconID 'objectSchemaId' = $objectSchemaId } if ($Description) { $RequestBody.Add('description', $Description) } if ($parentObjectTypeId) { $RequestBody.Add('parentObjectTypeId', $parentObjectTypeId) } if ($Inherited) { $RequestBody.Add('inherited', $Inherited) } if ($AbstractObjectType) { $RequestBody.Add('abstractObjectType', $AbstractObjectType) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttype/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Headers $headers -Method PUT } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Set-ObjectTypeAttribute { [CmdletBinding()] param ( [string]$ID, [string]$ObjectTypeId, [string]$Name, [string]$Label, [string]$Description, [ValidateSet("Default","Object Reference","User","Group","Status")] [string]$Type, [ValidateSet("None","Text","Integer","Boolean","Double","Date","Time","DateTime","URL","Email","TextArea","Select","IP Address")] [string]$defaultTypeId, [string]$typeValue, [array]$typeValueMulti, [string]$additionalValue, [int]$minimumCardinality, [int]$maximumCardinality, [string]$suffix, [bool]$includeChildObjectTypes, [bool]$hidden, [bool]$uniqueAttribute, [bool]$summable, [string]$regexValidation, [string]$iql, [string]$options, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers $ConvertedType = switch ($Type) { "Default" { 0 } "Object Reference" { 1 } "User" { 2 } "Group" { 4 } "Status" { 7 } } $ConvertedTypeID = switch ($defaultTypeId) { "None" { -1 } "Text" { 0 } "Integer" { 1 } "Boolean" { 2 } "Double" { 3 } "Date" { 4 } "Time" { 5 } "DateTime" { 6 } "URL" { 7 } "Email" { 8 } "TextArea" { 9 } "Select" { 10 } "IP Address" { 11 } } $RequestBody = @{ 'name' = $Name 'type' = $ConvertedType } if ($Label) { $RequestBody.Add('label', $Label) } if ($Description) { $RequestBody.Add('description', $Description) } if ($ConvertedTypeID) { $RequestBody.Add('defaultTypeId', $ConvertedTypeID) } if ($typeValue) { $RequestBody.Add('typeValue', $typeValue) } if ($typeValueMulti) { $RequestBody.Add('typeValueMulti', $typeValueMulti) } if ($additionalValue) { $RequestBody.Add('additionalValue', $additionalValue) } if ($minimumCardinality) { $RequestBody.Add('minimumCardinality', $minimumCardinality) } if ($maximumCardinality) { $RequestBody.Add('maximumCardinality', $maximumCardinality) } if ($suffix) { $RequestBody.Add('suffix', $suffix) } if ($includeChildObjectTypes -eq $true) { $RequestBody.Add('includeChildObjectTypes', $includeChildObjectTypes) } if ($hidden -eq $true) { $RequestBody.Add('hidden', $hidden) } if ($uniqueAttribute -eq $true) { $RequestBody.Add('uniqueAttribute', $uniqueAttribute) } if ($summable -eq $true) { $RequestBody.Add('summable', $summable) } if ($regexValidation) { $RequestBody.Add('regexValidation', $regexValidation) } if ($iql) { $RequestBody.Add('iql', $iql) } if ($options) { $RequestBody.Add('options', $options) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/objecttypeattribute/$ObjectTypeId/$ID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -body $RequestBody -Headers $headers -Method PUT } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } # https://developer.atlassian.com/cloud/insight/rest/api-group-config/#api-config-statustype-id-put function Set-StatusType { [CmdletBinding()] param ( [String]$ID, [String]$Name, [String]$Description, [ValidateSet("InActive\Red","Active\Green","Pending\Yellow")] [String]$Category, [String]$objectSchemaId, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Headers switch ($Category) { "InActive\Red" { 0 } "Active\Green" { 1 } "Pending\Yellow" { 2 } } $RequestBody = @{ 'name' = $Name 'category' = $Category } if ($Description) { $RequestBody.Add('description', $Description) } if ($objectSchemaId) { $RequestBody.Add('objectSchemaId', $objectSchemaId) } $RequestBody = ConvertTo-Json $RequestBody -Depth 1 } process { $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/config/statustype/$ID" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method PUT } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } function Update-ObjectByID { [CmdletBinding()] param ( [string]$ID, [string]$objectTypeId, [array]$attributesArray, [Bool]$hasAvatar, [string]$avatarUUID, [String]$Version = "1", [string]$InsightCreds = $InsightCreds, [string]$InsightWorkspaceID = $InsightWorkspaceID ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" $Headers = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]' $Headers.Add('content-type' , 'application/json') $Headers.Add('Authorization', 'Basic ' + $InsightCreds) } process { $RequestBody = @{ 'objectTypeId' = $objectTypeId 'attributes' = @($attributes) } $Request = [System.UriBuilder]"https://api.atlassian.com/jsm/insight/workspace/$InsightWorkspaceID/v$Version/object/$id" } end { try { $response = Invoke-RestMethod -Uri $Request.Uri -Body $RequestBody -Headers $headers -Method PUT } catch { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Failed" Write-Error -Message "$($_.Exception.Message)" -ErrorId $_.Exception.Code -Category InvalidOperation } $response Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } } #endregion |