Functions/Add-LSNote.ps1


function Add-LSNote {
    
    Param (
        [Parameter(Mandatory=$true)]
        [String]$Url,

        [Parameter(Mandatory=$true)]
        [String]$TicketID,

        [Parameter(Mandatory=$true)]
        [String]$Text,

        # Non-mandatory
        [String]$Username,
        [String]$Displayname,
        [String]$Email,
        [String]$Files,
        [ValidateSet("Public", "Internal")]
        [String]$Type
    )

     # Base parameters for url
    $params = @{
        action   = 'AddNote'
        TicketID = $TicketID
        Text     = $Text
    }
    
    # Add optional parameters if used
    if($Username)    {$params.Username    = $Username}
    if($Displayname) {$params.Displayname = $Displayname}
    if($Email)       {$params.Email       = $Email}
    if($Type)        {$params.Type        = $Type}
    if($Files)       {$params.Files       = $Files}

    # Building query string
    $queryString = ($params.GetEnumerator() | ForEach-Object {
        '{0}={1}' -f [uri]::EscapeDataString($_.Key), [uri]::EscapeDataString([string]$_.Value)
    }) -join '&'
    $fullUrl = '{0}{1}' -f $Url, $queryString

    # Add note using the api
    $Request = Invoke-WebRequest -Uri $fullUrl -UseBasicParsing
    
    # Checking response
    if($Request.StatusCode -ne 200) {
        throw ("{0} {1}" -f $Request.StatusCode, $Request.StatusDescription)
    }
    if(($Request.Content | ConvertFrom-Json).Success) {
        Write-Host "Note has been added successfully!" -ForegroundColor "Green"
    } else {
        Write-Host "Something went wrong when adding note." -ForegroundColor "Red"
        Write-Error $Request.Content
    }

    return $Request.Content
}