如何透過命令提示字元快速連接 Windows 內建的 VPN 連線

由於經常在家上班,當需要連接客戶主機時,都要先撥接公司的虛擬私有網路(VPN),然後才能開始連線。但每次都要用鍵盤+滑鼠點個好幾次才能連接完成,覺得太浪費時間了,不自動化不行。所以這就花了點時間研究如何用批次檔或快速鍵來啟動 VPN 連線,本篇文章講解每個步驟與設定技巧。

使用滑鼠連接 VPN 的方法

  1. 點擊 Windows 右下角的「網路」圖示

    image

  2. 點擊先前設定好的 VPN 連線設定檔並按下「連線」按鈕

    image

或是你可以從「設定」找到 VPN 連線設定:

  1. 按下快速鍵 Win+I

  2. 輸入 VPN 搜尋

  3. 按下方向鍵 ↓ 並按下 Enter 鍵

  4. 按下 Tab 鍵並按下 Enter 鍵選取 VPN 連接項目

  5. 按下 Tab 鍵跳到 連線 按鈕

  6. 按下 Space 鍵啟動 VPN 連線

    image

使用 Command Prompt 命令提示字元進行連線

Windows 10 有內建一個 rasdial.exe 工具,位於 C:\Windows\System32 路徑下,其用法如下:

C:\Windows\System32>rasdial.exe /?
使用方式:
        rasdial.exe entryname [username [password|*]] [/DOMAIN:domain]
                [/PHONE:phonenumber] [/CALLBACK:callbacknumber]
                [/PHONEBOOK:phonebookfile] [/PREFIXSUFFIX]

        rasdial.exe [entryname] /DISCONNECT

        rasdial.exe

        請參閱我們的線上隱私權聲明:
        'https://go.microsoft.com/fwlink/?LinkId=521839'

這個工具很神奇,在微軟官方文件中完全找不到任何文件,只有 Win32 API 的 C++ 說明文件而已。

以下是 rasdial.exe 工具的使用範例:

  1. 撥接 VPN

    rasdial.exe "VPNName" "Username" "Password"
    
    • VPNName 就是你的 VPN 連線名稱
    • Username 就是你的 VPN 帳號
    • Password 就是你的 VPN 密碼,且必須輸入明碼 (Plain Password)
      • 注意:就算你在 VPN 連線項目已經設定過密碼,這邊還是要再打一次一樣的!
  2. 掛斷 VPN

    rasdial.exe "VPNName" /DISCONNECT
    

上述指令寫成批次檔就可以用滑鼠雙擊連接/掛斷,相當方便!

撥接 VPN 時免輸入密碼的方法

我們使用 rasdial.exe 撥接 VPN 需要在命令提示字元環境下輸入 VPN 的帳號密碼,感覺就不太安全。以下我有研究出可以「記憶密碼」的方法:

  1. 請用「系統管理員權限」開啟 Notepad 或任意文字編輯器

    打開 %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk 檔案

    注意: 此檔案為 UTF-8 編碼,如果發現亂碼要記得調整編輯器設定。

  2. 調整設定無互動自動撥接 VPN 連線的參數

    上一個步驟的 rasphone.pbk 檔案,其實是一個 INI 文字檔,如果你有設定兩個不同的 VPN 連線,那麼這個檔案就會有兩個區段設定,請記得要調整正確的參數。

    你必須找到一個 PreviewUserPw=1 參數,其值預設為 1,你必須把他改成 0 之後儲存檔案,才能進行下一步。

  3. 執行 rasphone -d "MyVPN" 命令來撥接

    其中 MyVPN 是你在建立 VPN 連線時所指定的連線名稱!

    撥接 VPN 的過程中畫面會出現以下視窗,但是不會出現太久,當 VPN 連線成功後就會自動消失:

    Connecting to DuotifyVPN

上述三個步驟都設定成功,就代表你已經可以免密碼自動撥接 VPN 了!

今後就只要執行以下命令就可以自動撥接/掛斷 VPN,而且還不用將連線密碼寫死在批次檔或 AutoHotkey 的指令檔中:

  • 撥接 VPN

    rasphone -d "MyVPN"
    
  • 掛斷 VPN

    rasphone -h "MyVPN"
    

設定 AutoHotkey 自動連線

不過對於一個真正的懶人來說,批次檔是不夠的,還需要有快速鍵才能滿足啊! 😆

以下是我寫好的 AutoHotkey 命令腳本:

  1. 撥接 VPN ( 快速鍵: Ctrl-Alt-Shift-V )

    ^!+v::
    RunWait, rasdial.exe VPNName, C:\Windows\System32, Hide|UseErrorLevel
    if (ErrorLevel) {
        TrayTip, 啟動 VPN 連線, 連線至 VPN 發生錯誤 (%A_LastError%), 3, 3
    } else {
        TrayTip, 啟動 VPN 連線, 成功連線至 VPN  (%A_LastError%), 3, 1
    }
    return
    
  2. 掛斷 VPN ( 快速鍵: Ctrl-Alt-Shift-D )

    ^!+d::
    RunWait, rasdial.exe VPNName /DISCONNECT, C:\Windows\System32, Hide|UseErrorLevel
    if (ErrorLevel) {
        TrayTip, 啟動 VPN 連線, 中斷 VPN 連線發生錯誤  (%A_LastError%), 3, 3
    } else {
        TrayTip, 啟動 VPN 連線, 已中斷 VPN 連線 (%A_LastError%), 3, 1
    }
    return
    

上述 AutoHotkey 腳本中,TrayTip 命令會讓你連線成功或失敗時顯示通知訊息。

如果你是 Windows 10 用戶,且使用 TrayTip 完全沒效果,請用以下 Chocolatey 命令重新安裝 AutoHotkey 才會正常運作:

choco install autohotkey.install --params="'/DefaultVer:U32'"

相關討論:https://www.autohotkey.com/boards/viewtopic.php?p=261485#p261485

相關連結

留言評論