NewZendeskMemo.ps1
############################################################################### # Helper functions ############################################################################### function DisplayMessage($message) { Write-Output "$message" } function DownloadZendeskTicket($ticketURI) { $headers = @{ Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($username):$($token)")); } $ticket = Invoke-RestMethod -Uri $ticketURI -Method Get -Headers $headers -ContentType "application/json" $ticket.ticket } function CreateOrOpenZendeskMemo($number) { $file = "$store\#$number.txt" $uri = "$api/$number.json" $url = "$site/$number" $timestamp = Get-Date -Format "dddd dd/MM/yyyy HH:mm" try { if (-not(Test-Path -Path $file -PathType Leaf)) { $subject = (DownloadZendeskTicket($uri)).subject $title = "#$number - $subject" $separator = "=" * ($title.Length + 10) $title | Out-File $file -Append $separator | Out-File $file -Append $url | Out-File $file -Append DisplayMessage "Zendesk note file CREATED: $file" } else { DisplayMessage "Zendesk note file OPENED: $file" } $separator = "`r`n" + "-" * $timestamp.Length $separator | Out-File $file -Append $timestamp | Out-File $file -Append Invoke-Item $file } catch { throw $_.Exception.Message } } function SetSetting($key, $value, $secure = $false) { if (-not (Test-Path "$regpath")) { New-Item -Path $regpath | Out-Null } if ($secure) { $value = $value | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString } New-ItemProperty -Path $regpath -Name $key -PropertyType String -Value $value -Force | Out-Null } function GetSetting($key, $secure = $false) { if (Test-Path "$regpath") { $value = (Get-ItemProperty $regpath).$key if ($secure) { $secureValue = $value | ConvertTo-SecureString $value = [System.Net.NetworkCredential]::new("", $secureValue).Password } $value } } ############################################################################### # Main ############################################################################### function New-ZendeskMemo { [CmdletBinding()] param ( [Parameter(Mandatory=$false, HelpMessage="Zendesk ticket number.", Position=0)] [ValidatePattern('^\d\d\d\d\d\d$')] [string]$number, [Parameter(Mandatory=$false, HelpMessage="Zendesk API username.")] [string]$username, [Parameter(Mandatory=$false, HelpMessage="Zendesk API token.")] [string]$token, [Parameter(Mandatory=$false, HelpMessage="Local Zendesk memo store.")] [string]$store ) BEGIN { $regpath = 'HKCU:\SOFTWARE\ZendeskTools' $api = 'https://smokeball.zendesk.com/api/v2/tickets' $site = 'https://smokeball.zendesk.com/agent/tickets' if ($store) { SetSetting 'Store' $store } if ($username) { SetSetting 'Username' $username } if ($token) { SetSetting 'Token' $token $true } $username = GetSetting 'Username' $token = GetSetting 'Token' $true $store = GetSetting 'Store' } PROCESS { if ($number -and $username -and $token -and $store) { CreateOrOpenZendeskMemo $number } } END { } } New-Alias -Name ticket -Value New-ZendeskMemo |