在 Windows 中使用 PowerShell 管理 VPN 连接
在 Windows 10/11 GUI 中,仅提供用于配置 VPN 连接的轻量级界面,该界面不允许您配置某些 VPN 设置。您可以使用控制面板中的经典 VPN 连接设置界面和设置面板中的现代网络配置应用程序(
ms-settings:network-vpn用于快速访问设置的 URI 命令)来设置您的 VPN 连接设置。在这篇文章中,我们将了解如何使用 PowerShell 在 Windows 中管理 VPN 连接:如何创建/更改/删除 VPN 连接以及如何连接到 VPN 服务器/从 VPN 服务器断开连接。
要在 Windows 中创建新的 VPN 连接,请使用 Add-VpnConnection cmdlet。在最简单的情况下,您需要输入连接名称和 VPN 服务器地址。
Add-VpnConnection -Name VPNname1 -ServerAddress "vpn.a-d.site” -PassThru要配置 VPN 连接的自定义设置,请使用以下选项(最常用的选项):
-
TunnelType -VPN 隧道类型。有以下类型可供选择:
Automatic- Windows 尝试自行检测 VPN 隧道类型
IKEv2— 互联网密钥交换
PPTP- 点对点隧道协议
L2TP- 具有证书或预共享密钥的第 2 层隧道协议/IPsec
SSTP- 安全套接字隧道协议
L2TPPsk — 用于身份验证的预共享密钥(仅限 L2TP)。如果不设置该选项,则使用证书进行L2TP认证
AuthenticationMethod - 身份验证类型。您可以使用:
Pap,
Chap,
MSChapv2
,
Eap,
MachineCertificate加密级别 - 加密设置(
NoEncryption,
Optional,
Required,
Maximum,
Custom )
SplitTunneling - 设置计算机的所有流量是否必须通过 VPN 隧道发送(例如 VPN 适配器设置中的在远程网络上使用默认网关选项)
UseWinlogonCredential - 使用当前用户凭据在 VPN 服务器上进行身份验证
AllUserConnection - 允许所有计算机用户使用 VPN 连接
RememberCredential - 允许使用保存的 VPN 凭据(首次成功连接后,用户名和密码将保存在 Windows 凭据管理器中)
PassThru - 允许显示命令输出(建议对所有命令使用)
以下是创建不同类型 VPN 连接的 PowerShell 命令的一些示例。
L2TP/IPsec:
Add-VpnConnection -Name "VPN_L2TP" -ServerAddress "vpn.a-d.site" -TunnelType L2TP -L2tpPsk "My1pre-SharedKey2" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -UseWinlogonCredential -RememberCredential -AllUserConnection -PassThruPPTP:
Add-VpnConnection -Name "VPN_PPTP" -ServerAddress "vpn.a-d.site" TunnelType "PPTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -PassThruSSTP:首先,您需要将VPN服务器的根CA导入到计算机证书存储中,并使用证书中指定的VPN服务器的FQDN(CN - Common Name,或Subject Alternative Name)作为其地址:
Add-VpnConnection -Name "VPN_SSTP" -ServerAddress "vpn.a-d.site" -TunnelType "SSTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru使用自签名证书时,您可以使用 PowerShell 将多个名称 (SAN) 添加到证书。
IKEv2:必须先将根CA导入到Windows受信任的根证书存储中,并将计算机证书导入到个人证书存储中:
Import-PfxCertificate -FilePath $comp_certificate -CertStoreLocation Cert:\LocalMachine\My\ -Password $password Import-Certificate -FilePath $ca_cert -CertStoreLocation Cert:\LocalMachine\Root\ Add-VpnConnection -Name "VPN_IKEv2" -ServerAddress "vpn.a-d.site" -TunnelType Ikev2 -EncryptionLevel "Maximum" -AuthenticationMethod MachineCertificate -SplitTunneling $True -PassThru
所有用户可用的 VPN 连接(使用 AllUserConnection 选项创建)显示在网络中心,系统作为所有者。用户的连接将在此处列出域\用户名。
共享 VPN 连接保存到文本文件中:
%ProgramData%\Microsoft\Network\connections\Pbk\rasphone.pbk。
要更改现有 VPN 连接的设置,请使用 Set-VpnConnection 命令:
Set-VpnConnection -Name "VPN_SSTP" -splittunneling $false -PassThru如果要更改现有 VPN 连接的 IPsec 选项,请使用 Set-VpnConnectionIpsecConfiguration cmdlet(仅适用于 IKEv2 或 L2TP VPN):
Set-VpnConnectionIPsecConfiguration -ConnectionName "VPN_IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -PassThru您可以使用VPNCredentialsHelper模块来保存VPN连接的凭据。
从 PowerShell 库在您的计算机上安装模块(您也可以离线安装 PowerShell 模块):
Install-Module -Name VPNCredentialsHelper然后,您将能够在 Windows 凭据管理器中保存 VPN 连接的用户名和密码:
$user = "vpn_username1"
$plainpass = "vpn_password1"
Set-VpnConnectionUsernamePassword -connectionname "VPN_SSTP" -username $user -password $plainpass在现代 Windows 版本中,您可以在连接到 VPN 时动态地将静态路由添加到路由表中。
Add-VpnConnectionRoute -ConnectionName "VPN" -DestinationPrefix 192.168.31.0/24 -PassThru只有成功连接到 VPN 服务器后,该路由才会启用。
要显示用户可用的所有 VPN 连接的列表:
Get-VpnConnection要删除 VPN 连接:
Remove-VpnConnection -Name "VPN_SSTP"要使用之前配置的 VPN 配置文件连接到 VPN 服务器:
rasdial "VPN_SSTP"要获取所有 VPN 连接的状态:
Get-Vpnconnection | Select Name, Connectionstatus以下是一些有用的文章,可解决 Windows 中 VPN 连接的典型问题:
VPN 错误:您可能需要更改网络设置
VPN 处于活动状态时无法访问互联网
无法连接到 NAT-T 设备后面的 L2TP/IPsec 服务器
通过 VPN 连接的 Windows DNS 解析不起作用





