lib/Events.ps1
## Events Function Get-TMEvent { [OutputType([TMEvent])] param( [Parameter(Mandatory = $false)][String]$Name, [Parameter(Mandatory = $false)][String]$TMSession = 'Default', [Parameter(Mandatory = $false)][int]$ProjectId = $global:TMSessions[$TMSession].UserContext.project.id, [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer, [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL, [Parameter(Mandatory = $false)][Switch]$ResetIDs ) ## Get Session Configuration $TMSessionConfig = $global:TMSessions[$TMSession] if (-not $TMSessionConfig) { Write-Host 'TMSession: [' -NoNewline Write-Host $TMSession -ForegroundColor Cyan Write-Host '] was not Found. Please use the New-TMSession command.' Throw 'TM Session Not Found. Use New-TMSession command before using features.' } #Honor SSL Settings $TMCertSettings = @{ SkipCertificateCheck = $TMSessionConfig.AllowInsecureSSL } # Extract the host name and make up the URI [string] $instance = $Server -replace '/tdstm.*|https?://', '' [string] $uri = '{0}{1}{2}{3}{4}' -f 'https://', $instance, '/tdstm/api/event', '?project=', $ProjectId try { $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings -Headers $TMSessionConfig.TMRestSession.Headers } catch { return $_ } if ($response.StatusCode -ne 200) { throw ('There was an error retriving the event list.' + $_.Exception.Message) } ## Convert the results and sort them [PSCustomObject[]] $Results = $response.Content | ConvertFrom-Json if (-not $Results.Count) { Write-Host "No events found in session: '$TMSessionConfig'" -ForegroundColor Yellow return } $Results = $Results | Sort-Object -Property 'Name' ## In order not to modify the TMEvent.ps1 constructor, copying 'tags' into 'addTags' foreach ($result in $Results) { $result | Add-Member -MemberType NoteProperty -Name 'addTags' -Value $result.Tags } ## Clear ID numbers if ($ResetIDs) { foreach ($result in $Results) { $result.id = $null } } ## Return appropriate results if ($Name) { $Results = $Results | Where-Object Name -EQ $Name } foreach ($result in $Results) { [TMEvent]::new($result) } } function New-TMEvent { <# .SYNOPSIS Creates a new Event in TransitionManager .DESCRIPTION This function creates a new Event in TransitionManager .PARAMETER InputObject The Event to create. .PARAMETER Name The name for the Event .PARAMETER Description The description for the Event .EXAMPLE New-TMEvent -Name 'New Event #5' .EXAMPLE New-TMEvent -InputObject @{name = 'Event name'; description = 'Event Description'} .EXAMPLE [TMEvent]::new('First Event') | New-TMEvent -Passthru .OUTPUTS This command does not provide output. #> [CmdletBinding(DefaultParameterSetName = 'ByProperties')] [OutputType([TMEvent])] param( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true, ParameterSetName = 'ByObject')] [TMEvent] $InputObject, [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'ByProperties')] [String]$Name, [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'ByProperties')] [psobject[]]$Tags, [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'ByProperties')] [String]$Description, [Parameter(Mandatory = $false)][String]$TMSession = 'Default', [Parameter(Mandatory = $false)][int]$ProjectId = $global:TMSessions[$TMSession].UserContext.project.id, [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer, [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL, [Parameter(Mandatory = $false)][Switch]$PassThru ) begin { ## Get Session Configuration $TMSessionConfig = $global:TMSessions[$TMSession] if (-not $TMSessionConfig) { Write-Host 'TMSession: [' -NoNewline Write-Host $TMSession -ForegroundColor Cyan Write-Host '] was not Found. Please use the New-TMSession command.' Throw 'TM Session Not Found. Use New-TMSession command before using features.' } #Honor SSL Settings if ($TMSessionConfig.AllowInsecureSSL) { $TMCertSettings = @{SkipCertificateCheck = $true } } else { $TMCertSettings = @{SkipCertificateCheck = $false } } $instance = $Server.Replace('/tdstm', '') $instance = $instance.Replace('https://', '') $instance = $instance.Replace('http://', '') $uri = 'https://' $uri += $instance + '/tdstm/ws/moveEvent/save/null' } process { Write-Verbose "ParameterSet = $($PSCmdlet.ParameterSetName)" ## Handle the Parameter Creation based on the set $TMEvent = $PSCmdlet.ParameterSetName -eq 'ByProperties' ? [TMEvent]::new($Name, $Description, $Tags) : $InputObject ## Write the new Event that will be created Write-Verbose ($TMEvent | ConvertTo-Json) ## Update the Content Type to JSON Set-TMHeaderContentType -ContentType 'JSON' -TMSession $TMSession ## Check for an existing Event $CheckEvent = Get-TMEvent -Name $TMEvent.name -TMSession $TMSession if (-Not [String]::IsNullOrEmpty($CheckEvent.name)) { if ($Passtrhu) { return $CheckEvent } return } ## Create a Request Splat $WebRequestSplat = @{ Method = 'POST' Uri = $uri WebSession = $TMSessionConfig.TMWebSession Body = ($TMEvent | ConvertTo-Json) } try { $response = Invoke-WebRequest @WebRequestSplat @TMCertSettings if ($response.StatusCode -eq 200 ) { $ResponseContent = $response.content | ConvertFrom-Json if ($ResponseContent.status -ne 'success') { Write-Error -Message $ResponseContent.errors[0] return } else { ## The Object was returned, pass it through to if ($PassThru) { return [TMEvent]::new($ResponseContent.data) } else { return } } } elseif ($response.StatusCode -eq 204) { return (Get-TMEvent -Name $TMEvent.name) } else { throw 'Unable to Create Event' } } catch { throw $_ } } end { } } |