Skip to content

Instantly share code, notes, and snippets.

@Saibot942
Last active February 7, 2020 20:21
Show Gist options
  • Save Saibot942/100698e08bd9284aaf738a6ac11c5ceb to your computer and use it in GitHub Desktop.
Save Saibot942/100698e08bd9284aaf738a6ac11c5ceb to your computer and use it in GitHub Desktop.
Ticket handling tools for Kronos Cloud teams
; ========================================================================
; Ticket handling tools for Kronos Cloud teams
; ========================================================================
;
; Version: 2020.02.05
; Updated: Toby Garcia
; Source: https://gist.github.com/Saibot942/100698e08bd9284aaf738a6ac11c5ceb
;
; ========================================================================
;
; IMPORTANT INFO ABOUT GETTING STARTED: Lines that start with a semicolon,
; such as this one, are comments. They are not executed.
; Please read the QUICK-START TUTORIAL near the top of the help file.
; It explains how to perform common automation tasks such as sending
; keystrokes and mouse clicks. It also explains more about hotkeys.
; http://www.autohotkey.com/docs/Tutorial.htm
; # is windows key
; ^ is control
; ! is alt
; + is Shift
; & An ampersand may be used between any two keys or mouse buttons to combine them into a custom hotkey.
;https://www.autohotkey.com/docs/commands.htm
; This script has a special filename and path because it is automatically
; launched when you run the program directly. Also, any text file whose
; name ends in .ahk is associated with the program, which means that it
; can be launched simply by double-clicking it. You can have as many .ahk
; files as you want, located in any folder. You can also run more than
; one .ahk file simultaneously and each will get its own tray icon.
; SAMPLE HOTKEYS: Below are two sample hotkeys. The first is Win+Z and it
; launches a web site in the default browser. The second is Control+Alt+N
; and it launches a new Notepad window (or activates an existing one). To
; try out these hotkeys, run AutoHotkey again, which will load this file.
;#z::Run www.autohotkey.com
;^!n::
;IfWinExist Untitled - Notepad
; WinActivate
;else
; Run Notepad
;return
; Note: From now on whenever you run AutoHotkey directly, this script
; will be loaded. So feel free to customize it to suit your needs.
; ---------- USER VARIABLES ---------- USER VARIABLES ---------- USER VARIABLES ----------
; These variables may be specific to your environment.
browserTitle := "kronoscloud.service-now.com" ; Partial title of your preferred browser window for SNOW + SF search (win+w and win+f)
outlookTitle := "@kronos.com - Outlook" ; Partial title of your Outlook window for email search functionality (win+s)
; ---------- METASCRIPTS ---------- METASCRIPTS ---------- METASCRIPTS ----------
; These few scripts are specifically related to this overall program.
;#####################################################
;## Ctrl + Alt + Shift + l # List the functionality ##
;#####################################################
^!+l::
MsgBox,
(
Creator: toby.garcia@kronos.com
Source: https://gist.github.com/Saibot942/100698e08bd9284aaf738a6ac11c5ceb
AutoHotkey version: %A_AHKVersion%
`n<ctrl + alt + shift + L>`nDisplay this list
`n<ctrl + alt + shift + x>`nExit this AHK program
`n<win+w>`nOpen highlighted INC, RITM, TASK, etc. in ServiceNow
`n<win+f>`nOpen highlighted case or SID in SalesForce
`n<win+v>`nShow Clipboard contents in a popup message box
`n<ctrl+d>`nRemaps [ctrl]+d (bookmark shortcut) to [ctrl]+f in browsers
`n<ctrl+alt+d>`nInsert current date using [alt]+[shift]+d (Windows default) or [ctrl]+[alt]+d
`n<ctrl+alt+v>`nPaste unicode checkmark
`n<ctrl+alt+x>`nPaste unicode eckskmark
`n<ctrl+shift+v>`nPaste formatted text from clipboard in plaintext
`n<ctrl+shift+x>`nEmpty the Windows clipboard
`n<ctrl+shift+c>`nAppend a selected text to the end of existing clipboard
`n<ctrl+shift+u>`nPaste your signature
`n<ctrl+shift+g>`nPaste your greeting
`n<ctrl+shift+y>`nPaste the PAR template
`n<ctrl+shift+h>`nPaste reference hashtags
`ncut01 - 03`nPaste Cutover emails
`n"cut01-03"`nCutover Emails
`n<ctrl+Win+alt+v>`nCyberArk Paste Raw
)
return
; ----------
;############################################
;## Ctrl + Alt + Shift + x to exit program ##
;############################################
^!+x::
DetectHiddenWindows, On
SetTitleMatchMode, 2
Loop {
WinClose, .ahk
IfWinNotExist, .ahk
Break ;No [more] matching windows found
}
; ---------- GENERAL SETTINGS ---------- GENERAL SETTINGS ---------- GENERAL SETTINGS ----------
;To disable the key history shown below, add the line "#KeyHistory 0" anywhere in the script.
#KeyHistory 0
;#SingleInstance [force|ignore|off]
#SingleInstance force ;skips the dialog box and replaces the old instance automatically, which is similar in effect to the Reload command
;hide tray icon
;#NoTrayIcon ;ctrl alt shift x to exit
; ---------- FUNCTIONS ---------- FUNCTIONS ---------- FUNCTIONS ----------
;function stores the current contents of the system clipboard in origClipboard, then copies currently hilighted text into the clipboard
f_returnOrigClipboardAndCtrlC() {
;Msgbox,, f_returnOrigClipboardAndCtrlC, f_returnOrigClipboardAndCtrlC called!
sleep 100 ;Doesn't work without this pause!!!
origClipboard := Clipboard ;Save the system clipboard to our new variable origClipboard
Clipboard := "" ;Clear Clipboard so we can use ClipWait later...
SendInput ^c ;Copy whatever is hilighted
ClipWait, 1 ;Wait up to 1 second for Clipboard to contain text
if ErrorLevel
{
MsgBox,,f_returnOrigClipboardAndCtrlC, The attempt to copy text onto the clipboard failed. Did you highlight anything?
Exit, 1
}
;Msgbox,, f_returnOrigClipboardAndCtrlC, returning origClipboard:`n'%origClipboard%'`nto caller...
return, (origClipboard) ;Return [, Expression] (Variable names in an expression are not enclosed in percent signs, literal strings should be in "" quotes)
}
; ----------
;function restores the origClipboard value to the system clipboard, then exits
f_restoreSystemClipboardAndExit(origClipboard) {
;MsgBox,, f_restoreSystemClipboardAndExit, origClipboard contents:`n`n%origClipboard%, 2
Sleep 100 ;Doesn't work without this pause!!!
if ( strLen(origClipboard) > 0 ) {
Clipboard := "" ;Clear system clipboard so we can use ClipWait
Clipboard := origClipboard ;Restore original clipboard contents
ClipWait, 1 ;Wait up to 1 second for Clipboard to contain text
if ErrorLevel
{
MsgBox,,f_restoreSystemClipboardAndExit, The attempt to copy text onto the clipboard failed.
Exit, 1
}
origClipboard := "" ;free memory
Exit, 0 ;Exit
} else {
Exit, 0
}
}
; ----------
;Function to perform regex verification on clipboard contents and return it as an object with a type and a val
;val will have spaces and `r`n's removed
;Currently called from win+w and win+f
f_identifyClipboard() {
;Msgbox,, f_identifyClipboard, !!!
ahkInput := Clipboard ;Set hilighted text to ahkInput
StringReplace, ahkInput, ahkInput, `r`n, , All ;Remove all carrige returns and line feeds
StringReplace, ahkInput, ahkInput, %A_SPACE%, , All ;Remove all spaces
StringLen, ahkInputLen, ahkInput ;Set ahkInputLen to length of ahkInput
BugID := RegExMatch(ahkInput, "i)^ID") ;Set BugID to 1 if clipboard starts with id, not case sensitive
sfCase := RegExMatch(ahkInput, "[0,1][0-9]{7}") ;Set sfCase to 1 if clipboard is an 8 digit number, starting with 0
sfSID := RegExMatch(ahkInput, "6[0-9]{6}") ;Set sfSID to 1 if clipboard is a 7 digit number starting with 6
sfKB := RegExMatch(ahkInput, "i)^KB") ;Set sfSID to 1 if clipboard is a 7 digit number starting with 6
snowINC := RegExMatch(ahkInput, "i)^INC") ;Set snowINC to 1 if clipboard starts with INC, not case sensitive
snowCHG := RegExMatch(ahkInput, "i)^CHG") ;Set snowCHG to 1 if clipboard starts with CHG, not case sensitive
snowPRB := RegExMatch(ahkInput, "i)^PRB") ;Set snowPRB to 1 if clipboard starts with PRB, not case sensitive
snowPRJ := RegExMatch(ahkInput, "i)^PRJ") ;Set snowPRJ to 1 if clipboard starts with PRJ, not case sensitive
snowREQ := RegExMatch(ahkInput, "i)^REQ") ;Set snowREQ to 1 if clipboard starts with CHG, not case sensitive
snowRITM := RegExMatch(ahkInput, "i)^RITM") ;Set snowRITM to 1 if clipboard starts with RITM, not case sensitive
snowTASK := RegExMatch(ahkInput, "i)^SCTASK") ;Set snowTASK to 1 if clipboard starts with RITM, not case sensitive
;Msgbox,, f_identifyClipboard, ahkInput: '%ahkInput%' ;(DISABLED) Enable for debug messagging
;Msgbox,, f_identifyClipboard, ahkInputLen: '%ahkInputLen%' ;(DISABLED) Enable for debug messagging
if (ahkInputLen > 15) {
waffles := {type: "tooLong", val: ahkInputLen}
} else if (BugID) {
waffles := {type: "bugID", val: ahkInput}
} else if (sfCase) {
waffles := {type: "sfCase", val: ahkInput}
} else if (sfSID) {
waffles := {type: "sfSID", val: ahkInput}
} else if (sfKB) {
waffles := {type: "sfKB", val: ahkInput}
} else if (snowINC) {
waffles := {type: "snowINC", val: ahkInput}
} else if (snowCHG) {
waffles := {type: "snowCHG", val: ahkInput}
} else if (snowPRB) {
waffles := {type: "snowPRB", val: ahkInput}
} else if (snowPRJ) {
waffles := {type: "snowPRJ", val: ahkInput}
} else if (snowREQ) {
waffles := {type: "snowREQ", val: ahkInput}
} else if (snowRITM) {
waffles := {type: "snowRITM", val: ahkInput}
} else if (snowTASK) {
waffles := {type: "snowTASK", val: ahkInput}
} else {
waffles := {type: "noMatch", val: ahkInput}
}
return (waffles)
}
; ----------
;Activates the appropriate application window before any attempt to perform search.
;Currently called from win+w, win+f, and win+s
f_winAct(titleText) {
SetTitleMatchMode, 2 ; mode 1=starts with, 2=contains, 3=ends with
IfWinExist, %titleText% ; if a browser exists that matches the titleText
WinActivate ; use it
else ; otherwise
Msgbox, Launch or activate application ; you need to launch it and try again
return
}
; ----------
;win+w function
f_winW(winW, typeW) { ; determines the correct URL
if (typeW = "sfCase" or typeW = "sfSID") {
winWURL = "https://kronoscloud.service-now.com/nav_to.do?uri=/incident_list.do?sysparm_query=123TEXTQUERY321=%winW%^active=true"
} else if (typeW = "snowINC") {
winWURL = "https://kronoscloud.service-now.com/incident.do?sys_id=%winW%"
} else if (typeW = "snowCHG") {
winWURL = "https://kronoscloud.service-now.com/change_request.do?sys_id=%winW%"
} else if (typeW = "snowPRB") {
winWURL = "https://kronoscloud.service-now.com/problem_list.do?sys_id=%winW%"
} else if (typeW = "snowREQ") {
winWURL = "https://kronoscloud.service-now.com/sc_request.do?sys_id=%winW%"
} else if (typeW = "snowRITM") {
winWURL = "https://kronoscloud.service-now.com/sc_req_item.do?sys_id=%winW%"
} else if (typeW = "snowTASK") {
winWURL = "https://kronoscloud.service-now.com/sc_task.do?sys_id=%winW%"
}
SplashTextOn,1000,50,Opening %typeW%,%winWURL% ; splash message indicating URL action
Run, %winWURL% ; actually opening the website
Sleep, 2000
SplashTextOff
return
}
; ----------
;win+f function
f_winF(winF, typeF) { ; determines the correct URL
if (typeF = "sfCase") {
winFURL = "https://kronos.my.salesforce.com/_ui/search/ui/UnifiedSearchResults?searchType=2#!/fen=500&initialViewMode=detail&str=%winF%"
} else if (typeF = "sfSID") {
winFURL = "https://kronos.my.salesforce.com/_ui/search/ui/UnifiedSearchResults?searchType=2#!/fen=001&initialViewMode=detail&str=%winF%"
} else if (typeF = "sfKB") {
;winFURL = "https://community.kronos.com/s/article/%winF%"
winFURL = "https://kronos.my.salesforce.com/_ui/search/ui/UnifiedSearchResults?searchType=2#!/fen=ka&initialViewMode=detail&str=%winF%"
}
SplashTextOn,1000,50,Opening %typeF%,%winFURL% ; splash message indicating URL action
Run, %winFURL% ; actually opening the website
Sleep, 2000
SplashTextOff
return
}
; ----------
; ---------- SCRIPTS w/FUNCTIONS ---------- SCRIPTS w/FUNCTIONS ---------- SCRIPTS w/FUNCTIONS ----------
;#######################################
;## 'win+w' # goto selected in SNOW ##
;#######################################
;Set your preferred browser title in the global variables section at the top of this file if you use multiple browsers.
#w::
origClipboard := f_returnOrigClipboardAndCtrlC()
pancakes := f_identifyClipboard()
;Msgbox % "Clipboard: "Clipboard "`nType: "pancakes.type "`nVal: "pancakes.val "`norigClipboard: "origClipboard
if (pancakes.type = "sfCase" or pancakes.type = "sfSID" or pancakes.type = "snowINC" or pancakes.type = "snowCHG" or pancakes.type = "snowPRJ" or pancakes.type = "snowPRB" or pancakes.type = "snowREQ" or pancakes.type = "snowRITM" or pancakes.type = "snowTASK") {
f_winAct(browserTitle)
f_winW(pancakes.val, pancakes.type)
} else {
Msgbox,,% "Selection: "pancakes.type ,% "("pancakes.type ") is not valid for ServiceNow, try again.", 2
}
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
;######################################
;## 'win+f' # goto SalesForce case ##
;######################################
;This script sometimes fails when you're not already logged into SF. It seems to be an SSO issue and not something I can work around.
;Set your preferred browser title in the global variables section at the top of this file if you use multiple browsers.
#f::
origClipboard := f_returnOrigClipboardAndCtrlC()
pancakes := f_identifyClipboard()
;Msgbox % "Clipboard: "Clipboard "`nType: "pancakes.type "`nVal: "pancakes.val "`norigClipboard: "origClipboard
if (pancakes.type = "sfCase" or pancakes.type = "sfSID" or pancakes.type = "sfKB") {
f_winAct(browserTitle)
f_winF(pancakes.val, pancakes.type)
} else {
Msgbox,,% "Selection: "pancakes.type ,% "("pancakes.type ") is not valid for SalesForce try again.", 2
}
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
;############################################
;## 'win+s' # search selected in Outlook ##
;############################################
;This script works surprisingly well. :D If it becomes fragile on slower or heavily taxed systems, disable the unified command and enable the prior lines with comments.
;You can customize the Outlook title in the global variables section at the top of this file if you find it has trouble activating the correct Outlook window.
#s::
origClipboard := f_returnOrigClipboardAndCtrlC()
SplashTextOn,1000,50,Searching for email related to %Clipboard% ; splash message indicating URL action
f_winAct(outlookTitle) ; activate the main Outlook window (could be Inbox, Calendar, Tasks)
;SendInput ^1 ; Send Ctrl+1 to ensure we're in the Inbox
;Sleep, 250
;SendInput ^e ; send Ctrl-E to get into the search box
;Sleep, 250
;SendInput ^a{delete} ; select any text already in the search box and delete
SendInput ^1^e^a{delete} ; single unified send of the above
Sleep, 250
SendInput, %Clipboard% ; paste the clipboard contents and go
Sleep, 2000
SplashTextOff
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
; ---------- UTILITIES ---------- UTILITIES ---------- UTILITIES ----------
;########################################
;## 'ctrl+shift+v' # paste plaintext ##
;########################################
^+v::
clipboard = %clipboard% ; will remove formatting from windows clipboard
SendInput ^v ; ctrl + v (paste windows clipboard)
return ; To execute multiple commands, put the first line beneath the hotkey definition and make the last line a return
; ----------
;##########################################
;## 'ctrl+win+alt+v' # CyberArk paster ##
;##########################################
^#!v::
SendInput ^c ;Copy selected text
ClipWait, 1 ;Wait up to 1 second for Clipboard to contain text
if ErrorLevel
{
MsgBox,,, The attempt to copy text onto the clipboard failed. Did you highlight anything?
Exit, 1
}
MsgBox, 4097, , Activate the window into which you wish to paste text and click OK.`n`nText block to be pasted:`n`n%Clipboard%
IfMsgBox, Cancel ;CANCEL handler
{
SplashTextOn,,, Canceled
Sleep 750
SplashTextOff
Return
}
Sleep, 250
SendRaw, %Clipboard% ;sends raw keystrokes to type windows clipboard contents
return
; ----------
;################################
;## 'win+v' # show clipboard ##
;################################
; Show Clipboard contents in a popup message box
#v::
MsgBox,,Clipboard contents:, %Clipboard%, 25
return
; ----------
;################################
;## 'ctrl+alt+d' = alt+shift+d ##
;################################
; insert current date using [alt]+[shift]+d (Windows default) or [ctrl]+[alt]+d
^!d::send, !+d
; ----------
;#########################
;## 'ctrl+d' = ctrl+f ##
;#########################
; remaps [ctrl]+d (bookmark shortcut) to [ctrl]+f to perform search within webpage
^d::send, ^f
; ----------
;################################
;## Windows Search = Refresh ##
;################################
; remaps the Windows search button on MS Ergonomic keyboard to F5 (Refresh)
;+#SC06C::send, {F5} ; (DISABLED)
; ----------
;########################################
;## 'ctrl+alt+v' # unicode checkmark ##
;########################################
; [ctrl]+[alt]+v -- insert unicode checkmark)
^!v::
SendInput, {U+2714}
return
; ----------
;########################################
;## 'ctrl+alt+x' # unicode eckskmark ##
;########################################
; [ctrl]+[alt]+x -- insert unicode ecksmark [x])
^!x::
SendInput, {U+2718}
return
; ----------
;######################################
;## 'ctrl+shift+x' # clear clipboard ##
;######################################
; Empty the Windows clibboard
^+x::
if ( StrLen(Clipboard) > 0 ) {
Msgbox, 4, Crtl + Alt + x, Clear Clipboard?
IfMsgBox, Yes
{
Clipboard := ""
Msgbox,, Hey`, Listen!, Clipboard Cleared!, 1
return
}
return
} else {
Msgbox,, Hey`, Listen!, Clipboard already empty!, 1
return
}
; ----------
;###############################################
;## 'ctrl+shift+c' # Copy Append (non-binary) ##
;###############################################
; Append a selected text to the end of existing clipboard using expressional assignment.
^+c::
origClipboard := f_returnOrigClipboardAndCtrlC()
if ( StrLen(origClipboard) > 0 ) {
newClipboard := "`r`n`r`n" . Clipboard ;whatever was highlighted is now in our new variable newClipboard (appending two return line feeds)
Clipboard := "" ;orig and new clipboards saved, clear system clipboard
Clipboard := origClipboard . newClipboard ;Set system clipboard with the newClipboard appended to the origClipboard
ClipWait, 1
if ErrorLevel
{
MsgBox,,Ctrl+Shift+c (Copy Append), The attempt to copy text onto the clipboard failed.
Exit, 1
}
newClipboard := "" ;free memory
origClipboard := "" ;free memory
return
} else {
return
}
; ---------- MY SCRIPTS ---------- MY SCRIPTS ---------- MY SCRIPTS ----------
;######################################
;## 'ctrl+shift+u' # paste signature ##
;######################################
;Will paste your signature super fast, saves original clipboard content (non-binary)
^+u::
origClipboard := Clipboard ;store original clipboard contents to restore later
Clipboard := "" ;clear Clipboard so we can use ClipWait
Clipboard := "Please let me know if you have any additional questions.`n`nKind regards,`nToby Garcia | Cloud Operations Lead | Kronos Incorporated`ntel: 978-947-1661 | Kronos Global Support: 800-394-4357`n`nKronos | Workforce Innovation That Works`nJoin Kronos on: kronos.com | Facebook | Twitter | LinkedIn | YouTube"
ClipWait, 1
SendInput ^v ;Paste Sig
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
;###################################
;## 'ctrl+shift+g' # Greeting ##
;###################################
;Will paste your greeting email super fast, saves original clipboard content (non-binary)
^+g::
origClipboard := Clipboard ;store original clipboard contents to restore later
Clipboard := "" ;clear Clipboard so we can use ClipWait
Clipboard := "Hello,`nMy name is Toby and I have the privilege to be your engineer for this service request."
ClipWait, 1
SendInput ^v ;Paste Greeting
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
;################################
;## 'ctrl+shift+y' # paste PAR ##
;################################
;Will paste the PAR template super fast, saves original clipboard content (non-binary content)
^+y::
origClipboard := Clipboard ;store original clipboard contents to restore later
Clipboard := "" ;clear Clipboard so we can use ClipWait
Clipboard := "PAR Summary`n`nPROBLEM:`n<Concise problem statement>`n`nANALYSIS:`n<One to three bullets>`n`nRESOLUTION:`n<Keep it short & sweet>"
Clipboard := "Problem Specification:`n (Clear, confirmed, specific restatement of the actual problem)`n`nAnalysis:`n (Assertions proven or disproven through troubleshooting, relevant objects or messages, assumptions challenged, triggers for recognizing specified problem)`n`nResolution:`n (critical analysis of actual resolution to specified problem, consider 5 whys, list IDs or KBs)`n`n#PAR"
ClipWait, 1
SendInput ^v ;Paste PAR
f_restoreSystemClipboardAndExit(origClipboard)
; ----------
;###################################
;## 'ctrl+shift+h' # ref hashtags ##
;###################################
;Will paste the reference hashtags super fast, saves original clipboard content (non-binary content)
^+h::
origClipboard := Clipboard ;store original clipboard contents to restore later
Clipboard := "" ;clear Clipboard so we can use ClipWait
Clipboard := "`n`n`n#refINC: #refRITM #refCase #refCHG"
ClipWait, 1
SendInput ^v ;Paste hashtags
f_restoreSystemClipboardAndExit(origClipboard)
; ---------- HOTSTRINGS ---------- HOTSTRINGS ---------- HOTSTRINGS ----------
;To define a hotstring, enclose the triggering abbreviation between pairs of colons as in this example:
; ::btw::by the way
;
; For the previous example, you must type an ending character (e.g. Tab or Enter) after the hotstring abbreviation to trigger it.
; Asterisk option: An ending character (e.g. Space, ., or Enter) is not required to trigger the hotstring. For example:
; :*:j@::jsmith@somedomain.com
:*:newinc::kronoscloud@service-now.com
::!shrug::¯\_(ツ)_/¯
:*:cadocs::
( Join`r`n
Access via CyberArk: https://kronos.my.salesforce.com/kA361000000fy8S?srPos=1&srKp=ka3&lang=en_US
Move files via SFTP: https://kronos.my.salesforce.com/kA34M000000kABX?srPos=0&srKp=ka3&lang=en_US
)
::td::
SendInput %A_YYYY%-%A_MM%-%A_DD%
return
::dt::
SendInput %A_YYYY%-%A_MM%-%A_DD% %A_Hour%:%A_Min%
return
::Cut01::
(
GM ,
Cloud teams are standing by to perform this cutover at HH:MM. Please confirm when pre-cutover tasks are complete and we will proceed.
Thanks,
)
::Cut02::
(
Thank you !
Cloud teams proceed with your assigned cutover tasks for RITM.
Best,
)
::Cut03::
(
Thank you !
, you may resume post-cutover TC tasks.
Cloud teams, please finalize any outstanding cutover tasks.
Thanks again to all,
)
@Saibot942
Copy link
Author

2019-05-15 Changelog:
• Added function to select my preferred browser before launching URLs
• Modified win+F and win+W scripts to utilize the new function
• Added new section for HotString substitutions

@Saibot942
Copy link
Author

2020-02-05 Changes:

  • Added functionality to paste text from laptop into CyberArk protected servers
  • Added HotStrings for WFC Cutover emails

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment