The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過命令提示字元快速連接 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

相關連結