Freshdesk.psm1
$baseUrl = "https://guidnew.freshdesk.com/api/v2"; <# .SYNOPSIS Connects to Freshdesk. .DESCRIPTION Credentials can be persisted using https://www.powershellgallery.com/packages/CredentialsManager/ by setting the parameter UseCredentialsManager to $True. o $Credential -eq $Null -and $UseCredentialsManager -eq $Null -> credentials are requested and are not persisted o $Credential -ne $Null -and $UseCredentialsManager -eq $Null -> passed credentials are used and not persisted o $Credential -ne $Null -and $UseCredentialsManager -ne $Null -> passed credentials are used and persisted o $Credential -eq $Null -and $UseCredentialsManager -ne $Null -> Persisted credentials are used .PARAMETER Credential Credential to access Freshdesk with. I not provided they get requested. .PARAMETER UseCredentialsManager If $True, credentials are read and written using the CredentialsManager. Only Password part, containing the APIKey, is used. #> function Connect-FD { [CmdletBinding()] Param( [PSCredential]$Credential, [Boolean]$UseCredentialsManager = $False ) #end param # check module prerequisites if($UseCredentialsManager) { $module = Get-Module -ListAvailable -Name "CredentialsManager"; if (!$module) { throw "Module 'CredentialsManager' needed. Please install executing 'Install-Module -Name CredentialsManager' as Administrator."; } } if($UseCredentialsManager -and $Credential -eq $Null) { $Credential = Read-Credential -ListAvailable | Where { $_.Environment -eq "Freshdesk" } } if(!$Credential) { $Credential = Get-Credential -Message "Please enter API Key for Freshdesk as username (password can be anything)."; } if($UseCredentialsManager) { Write-Credential "Freshdesk" -Credential $Credential; } $script:base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Credential.UserName,$Credential.Password))) } <# .SYNOPSIS Get Tickets by Filter from Freshdesk .DESCRIPTION If no ticket is found, an empty array is returned. .PARAMETER FilterName Name of filter to get tickets for. #> function Get-FDTickets { [CmdletBinding()] Param( [string]$FilterName ) if(!$script:base64AuthInfo) { Connect-FD -UseCredentialsManager $True; } $parameters = @{ } if($Name) { $parameters.Add("filter", $FilterName) } $uri = New-HttpQueryString "${baseUrl}/tickets" $parameters $response = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $script:base64AuthInfo)}; return $response } <# .SYNOPSIS Get Ticket by Id .DESCRIPTION .PARAMETER Id Id of ticket to get. #> function Get-FDTicket { [CmdletBinding()] Param( [int]$Id ) if(!$script:base64AuthInfo) { Connect-FD -UseCredentialsManager $True; } $parameters = @{ } $uri = New-HttpQueryString "${baseUrl}/tickets/${Id}" $parameters $response = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $script:base64AuthInfo)}; return $response } ## Private Functions function New-HttpQueryString { [CmdletBinding()] param ( [Parameter(Mandatory = $true)][String]$Uri, [Parameter(Mandatory = $true)][Hashtable]$QueryParameter ) # Add System.Web Add-Type -AssemblyName System.Web # Create a http name value collection from an empty string $nvCollection = [System.Web.HttpUtility]::ParseQueryString([String]::Empty) foreach ($key in $QueryParameter.Keys) { $nvCollection.Add($key, $QueryParameter.$key) } # Build the uri $uriRequest = [System.UriBuilder]$uri $uriRequest.Query = $nvCollection.ToString() return $uriRequest.Uri.OriginalString } |