Set-GitLabProjectIssue.ps1

function Set-GitLabProjectIssue
{
  <#
      .SYNOPSIS
      Sets the properties on an issue you specify.
      .DESCRIPTION
      The Set-GitLabProjecctIssue function sets the properties you specify on a issue.
      Returns the modified issue when -PassThru is specified.
      .EXAMPLE
      Set-GitLabProjectIssue -ProjectID 20 -IssueID 1 -Title 'Renamed IssueID'
      ---------------------------------------------------------------
      Renames issue 1 on project 20 to 'Renamed IssueID'
      .EXAMPLE
      Set-GitLabProjectIssue -ProjectID 20 -IssueID 1 -StateEvent close
      ---------------------------------------------------------------
      Closes issue 1 on project 20
      .EXAMPLE
      Set-GitLabProjectIssue -ProjectID 20 -IssueID 1 -StateEvent reopen
      ---------------------------------------------------------------
      Reopens issue 1 on project 20
  #>

  [CmdletBinding()]
  [Alias()]
  [OutputType()]
  Param
  (
    # The Project ID
    [Parameter(HelpMessage = 'ProjectID',
    Mandatory = $true)]
    [Alias('ID')]
    [int]$ProjectID,
    
    # The ID of the issue
    [Parameter(HelpMessage = 'IssueID',
    Mandatory = $true)]
    [alias('issue_id')]
    [int]$IssueID,

    # The title for the issue
    [Parameter(Helpmessage = 'The title of an issue')]
    [string]$Title,

    # The description for the issue
    [Parameter(Helpmessage = 'The description of the issue',mandatory = $false)]
    [string]$Description,
    
    # The assignee ID for the issue
    [Parameter(Helpmessage = 'The ID of a user to assign issue',mandatory = $false)]
    [Alias('assignee_id')]
    [int]$AssigneeID,
    
    # The milestone ID to assign the issue to
    [Parameter(Helpmessage = 'The ID of a milestone to assign issue',mandatory = $false)]
    [Alias('milestone_id')]
    [int]$MilestoneID,
    
    # the labels to assign to the issue
    # overwrites any labels previously assigned
    [Parameter(HelpMessage = 'label names for an issue',mandatory = $false)]
    [string[]]$Labels,

    # Reopens or closes the Issue
    [Parameter(HelpMessage = 'StateEvent (opened|closed)')]
    [validateset('reopen','close')]
    [alias('state_event')]
    [string]$StateEvent,

    # Modify the creationdate the issue was created.
    [Parameter(Helpmessage = 'the date the issue was created',mandatory = $false)]
    [alias('updated_at')]
    [datetime]$UpdatedAt,

    # The Due Date for the issue
    [Parameter(Helpmessage = 'the due date of the issue',mandatory = $false)]
    [alias('due_date')]
    [datetime]$DueDate,

    # Existing GitlabConnector Object, can be retrieved with Get-GitlabConnect
    [Parameter(HelpMessage = 'Specify Existing GitlabConnector',
        Mandatory = $false,
    DontShow = $true)]
    [psobject]$GitlabConnect = (Get-GitlabConnect),

    # Return the modified issue
    [Parameter(HelpMessage = 'Passthru the modified issue',
    Mandatory = $false)]
    [switch]$PassThru
  )
  
  $httpmethod = 'put'
  $apiurl = "projects/$ProjectID/issues/$IssueID"
  $parameters = @{
  }

  if($Title)
  {
    $parameters.title = $Title
  }
  if($Description)
  {
    $parameters.description = $Description
  }

  if($AssigneeID)
  {
    $parameters.'assignee_id' = $AssigneeID
  }

  if ($MilestoneID)
  {
    $parameters.'milestone_id' = $MilestoneID
  }

  if($Labels)
  {
    $parameters.labels = @($Labels) -join ','
  }

  if($StateEvent)
  {
    $parameters.'state_event' = $StateEvent
  }

  if($UpdatedAt)
  {
    $parameters.'updated_at' = $UpdatedAt.ToUniversalTime().tostring('s') +'Z'
  }

  if($DueDate)
  {
    $parameters.'due_date' = $DueDate.tostring("yyyy'-'MM'-'dd")
  }

  $modissue = $GitlabConnect.callapi($apiurl,$httpmethod,$parameters)

  if($PassThru)
  {
    return $modissue
  }
}