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

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

### 使用滑鼠連接 VPN 的方法

1.  點擊 Windows 右下角的「網路」圖示
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/7cf5bf903ce692144c45-185750892-ca96a4fd-1bed-48d2-8287-0b4ef2422916.png)
    
2.  點擊先前設定好的 VPN 連線設定檔並按下「連線」按鈕
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/ff7f14ead223f0e0ad6c-185751613-c8e56448-12ad-45f6-b0ac-2c4b293d108e.png)
    

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

1.  按下快速鍵 `Win+I`
    
2.  輸入 `VPN` 搜尋
    
3.  按下方向鍵 `↓` 並按下 `Enter` 鍵
    
4.  按下 `Tab` 鍵並按下 `Enter` 鍵選取 VPN 連接項目
    
5.  按下 `Tab` 鍵跳到 `連線` 按鈕
    
6.  按下 `Space` 鍵啟動 VPN 連線
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/74842b6e771ceae23569-52642029-2ac6c880-2f15-11e9-9ed9-94cf3936235a.png)
    

### 使用 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](https://learn.microsoft.com/en-us/windows/desktop/api/ras/nf-ras-rasdiala) 的 C++ 說明文件而已。

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

1.  撥接 VPN
    
    ```batch
    rasdial.exe "VPNName" "Username" "Password"
    ```
    
    -   `VPNName` 就是你的 VPN 連線名稱
    -   `Username` 就是你的 VPN 帳號
    -   `Password` 就是你的 VPN 密碼，且必須輸入**明碼** (Plain Password)
        -   **注意**：就算你在 VPN 連線項目已經設定過密碼，這邊還是要再打一次一樣的！
2.  掛斷 VPN
    
    ```batch
    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](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/92f1052f456cce60522d-119266982-8d908980-bc1f-11eb-8e29-c38dcfea1f5b.jpg)
    

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

今後就只要執行以下命令就可以自動撥接/掛斷 VPN，而且還不用將**連線密碼**寫死在**批次檔**或 [AutoHotkey](https://www.autohotkey.com/) 的指令檔中：

-   撥接 VPN
    
    ```powershell
    rasphone -d "MyVPN"
    ```
    
-   掛斷 VPN
    
    ```powershell
    rasphone -h "MyVPN"
    ```
    

### 設定 AutoHotkey 自動連線

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

以下是我寫好的 [AutoHotkey](https://www.autohotkey.com/) 命令腳本：

1.  撥接 VPN ( 快速鍵: `Ctrl-Alt-Shift-V` )
    
    ```ahk
    ^!+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` )
    
    ```ahk
    ^!+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](https://www.autohotkey.com/docs/commands/TrayTip.htm) 命令會讓你連線成功或失敗時顯示通知訊息。

> 如果你是 Windows 10 用戶，且使用 TrayTip 完全沒效果，請用以下 Chocolatey 命令重新安裝 AutoHotkey 才會正常運作：
> 
> ```bash
> choco install autohotkey.install --params="'/DefaultVer:U32'"
> ```
> 
> 相關討論：[https://www.autohotkey.com/boards/viewtopic.php?p=261485#p261485](https://www.autohotkey.com/boards/viewtopic.php?p=261485#p261485)

### 相關連結

-   [Automatic VPN Connections Using RASDIAL](https://www.s-code.com/forum/704/Automatic-VPN-Connections-Using-RASDIAL)
-   [windows - Establish a VPN connection in cmd - Stack Overflow](https://stackoverflow.com/questions/14614465/establish-a-vpn-connection-in-cmd)
-   [Too many steps to connect to a VPN in Windows 10 - Microsoft Community](https://web.archive.org/web/20161108024616/http://answers.microsoft.com:80/en-us/windows/forum/windows_10-networking/too-many-steps-to-connect-to-a-vpn-in-windows-10/5d326a7b-9695-457a-b6b4-ea9dc16e1dc6)
