在Mac OS X 10.11中,使用命令行打开VPN连接窗口会出错

alb*_*o56 10 macos applescript osx-elcapitan

在Mac OS X <= 10.10上,我可以运行以下命令来打开VPN连接窗口:

function go-vpn {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "LF VPN"
                if exists VPN then connect VPN
                repeat while (current configuration of VPN is not connected)
                    delay 1
                end repeat
        end tell
end tell
EOF
}
Run Code Online (Sandbox Code Playgroud)

这将打开连接窗口(与从VPN下拉列表中选择"LF VPN"网络相同).但是,在El Capitan,我收到以下错误:

execution error: System Events got an error: Can’t get current configuration of service id "18E8C59B-C186-4669-9F8F-FA67D7AA6E53" of network preferences. (-1728)
Run Code Online (Sandbox Code Playgroud)

如何在El Capitan中完成相同的操作,如何调试?

带注释的屏幕截图

cap*_*ing 15

我正在使用scutil它,它在OS X 10.11上运行完美

set vpn_name to "'VPN Connection Name'"
set user_name to "my_user_name"
set otp_token to "XYZXYZABCABC"

tell application "System Events"
    set rc to do shell script "scutil --nc status " & vpn_name
    if rc starts with "Connected" then
        do shell script "scutil --nc stop " & vpn_name
    else
        set PWScript to "security find-generic-password -D \"802.1X Password\" -w -a " & user_name
        set passwd to do shell script PWScript
        -- installed through "brew install oath-toolkit"
        set OTPScript to "/usr/local/bin/oathtool --totp --base32 " & otp_token
        set otp to do shell script OTPScript
        do shell script "scutil --nc start " & vpn_name & " --user " & user_name
        delay 2
        keystroke passwd
        keystroke otp
        keystroke return
    end if
end tell
Run Code Online (Sandbox Code Playgroud)


Oli*_*Ash 8

VPN="YOUR_VPN_NAME"
IS_CONNECTED=$(test -z `scutil --nc status "$VPN" | grep Connected` && echo 0 || echo 1);

if [ $IS_CONNECTED = 1 ]; then
  scutil --nc stop "$VPN"
else
  scutil --nc start "$VPN"
fi
Run Code Online (Sandbox Code Playgroud)


小智 5

使用 shell 脚本代替:

scutil --nc start "$service"    #connect
scutil --nc stop "$service"     #disconnect
Run Code Online (Sandbox Code Playgroud)