-
-
Save tmanternach/cbd4c213eab8569e38d6cd021b6255e5 to your computer and use it in GitHub Desktop.
(* | |
Toggle GlobalProtect VPN with AppleScript | |
Tested using macOS Ventura 13.4.1 and GlobalProtect version 6.2.0-89 | |
Written by Trevor Manternach, August 2023. | |
*) | |
tell application "System Events" to tell process "GlobalProtect" | |
click menu bar item 1 of menu bar 2 | |
set statusText to name of static text 1 of window 1 | |
if statusText is "Not Connected" then | |
# GlobalProtect is disconnected, so let's connect | |
click button "Connect" of window 1 | |
set entireContents to entire contents of window 1 | |
else if statusText is "Connected" then | |
# GlobalProtect is connected, so let's disconnect | |
set windowText to entire contents of window 1 | |
repeat with theItem in windowText | |
if (class of theItem is button) then | |
if (value of attribute "AXTitle" of theItem is "Disconnect") then | |
# We found a Disconnect button on the main page, let's click it. | |
click theItem | |
exit repeat | |
else | |
# We did not find a Disconnect button on the main page, let's hope there is one in the Settings Menu. | |
click button "Global Protect Options Menu" of window 1 | |
click menu item "Disconnect" of menu "Global Protect Options Menu" of button "Global Protect Options Menu" of window 1 | |
exit repeat | |
end if | |
end if | |
end repeat | |
end if | |
click menu bar item 1 of menu bar 2 | |
end tell |
(* | |
Toggle GlobalProtect VPN with AppleScript | |
Tested using macOS 10.14 and GlobalProtect version 5.2.3-22 | |
Tested using macOS Ventura 13.4.1 and GlobalProtect version 6.0.1-19 | |
Written by Trevor Manternach, July 2021. | |
*) | |
tell application "System Events" to tell process "GlobalProtect" | |
click menu bar item 1 of menu bar 2 -- Activates the GlobalProtect "window" in the menubar | |
click button 2 of window 1 -- Clicks either Connect or Disconnect | |
click menu bar item 1 of menu bar 2 -- This will close the GlobalProtect "window" after clicking Connect/Disconnect. This is optional. | |
end tell |
Hi,
First, this is awesome I was wondering how to manage this for a long time now. Not having much experience in applescript, this is really useful thanks!
On my side using Ventura 13.5 and GlobalProtect 6.2.0-89 it works very well for connecting, but not for disconnecting. I assume the UI has changed since there is not 'disconnect' button in place of the 'connect' button when the VPN is active. Instead I need to click on the three lines button on top right and select the last option.
I managed to activate the top right button with click button 1 of window 1
but I can't figure out how to select the last menu item with apple script. Any chance you can help?
Hi, First, this is awesome I was wondering how to manage this for a long time now. Not having much experience in applescript, this is really useful thanks!
On my side using Ventura 13.5 and GlobalProtect 6.2.0-89 it works very well for connecting, but not for disconnecting. I assume the UI has changed since there is not 'disconnect' button in place of the 'connect' button when the VPN is active. Instead I need to click on the three lines button on top right and select the last option. I managed to activate the top right button with
click button 1 of window 1
but I can't figure out how to select the last menu item with apple script. Any chance you can help?
Any chance you would be able to email me a couple of screenshots of your disconnect process? My email is on my github profile if you want to keep it private.
@orizonlabs I've added a new applescript to this gist that might work for you. I updated to 6.2.0-89, but mine does not behave the same way as yours so I had to do a little guessing.
Please report back if this works or not. ;-)
Hi!
Many thanks for your feedback.
Running the updated script does not much, and has the following output:
menu bar item 1 of menu bar 2 of application process "GlobalProtect" of application "System Events"
Here is a screenshot of the disconnect button, it's the last one which says 'Déconnecter', in French :)
https://dsc.cloud/angeswadman/globalprotect.jpg
EDIT: I was eager to answer, and didn't test it deeply enough. I translated the items menus in the script, and it works now. The only item I didn't translate was "Global Protect Options Menu".
@orizonlabs Sorry for the delayed response! I came to suggest you translate those items to French, but it looks like you beat me to it! I'm glad it works for you! Come back if it ever breaks, happy to help. 🍻
@tmanternach Thanks so much for posting!
In case it's helpful for anyone else, I modified this script to deal with multiple VPN connections:
tell application "System Events" to tell process "GlobalProtect"
click menu bar item 1 of menu bar 2
set statusText to name of static text 2 of window 1
if statusText is "Not Connected" then
tell pop up button "Portal" of window 1
click
delay 0.2
click menu item "[NAME OF VPN]" of menu 1
end tell
end if
end tell
I have one of these scripts for each of my VPN connections and trigger them with an Alfred workflow using a keyword.
@mello You are welcome; I'm glad it's working for you, I like the idea for multiple connections. Thanks for the kind words.
@tmanternach Can you actually help how to automate entering password. Typically the username is prefilled and Password is combination of static text and token (which I can get it from another automation)
Step 1: Click Connect (VPN portal is autofilled)
Step 2: Ask for Username (autofilled) and Password (the cursor highlighted by default)
Step 3: Click Connect
@tmanternach Can you actually help how to automate entering password. Typically the username is prefilled and Password is combination of static text and token (which I can get it from another automation)
Step 1: Click Connect (VPN portal is autofilled) Step 2: Ask for Username (autofilled) and Password (the cursor highlighted by default) Step 3: Click Connect
@nitin88 Have you played with this code from a previous comment?
tell application "System Events" to tell process "GlobalProtect"
click menu bar item 1 of menu bar 2
tell application "System Events"
keystroke tab
delay 0.2
keystroke "username"
delay 0.2
keystroke tab
delay 0.2
keystroke "password"
delay 0.2
end tell
click button 2 of window 1
end tell
I have a similar problem to that of @orizonlabs. I am running GlobalProtect App Version 6.2.3.-270
Connect works great.
Disconnect fails on the line
click menu item "Disconnect" of menu "Global Protect Options Menu" of button "Global Protect Options Menu" of window 1
I shows the Syntax Error
dialog:
System Events got an error: Can’t get menu "Global Protect Options Menu" of button "Global Protect Options Menu" of window 1 of process "GlobalProtect".
@Mellbourn I do not use this script but I experienced the same error and noticed in my environment the Disconnect and Refresh Connection buttons lay within menu 1 of the "Global Protect Options Menu". So try changing that line to:
click menu item "Disconnect" of menu 1 of button "Global Protect Options Menu" of window 1
@mmacvicar unfortunately, that also fails. Syntax error:
System Events got an error: Can’t get menu item "Disconnect" of menu 1 of button "Global Protect Options Menu" of window 1 of process "GlobalProtect".
Update: looks like there was a MacOS, i suspect some DNS issues, long story short after a reboot all was working (fast) as expected.