你从 Windows 设置中删除连接,重新打开列表,它又回来了。或者它从设置里消失了,却仍然响应 PowerShell。又或者你卸载了 VPN 客户端,那条记录却从未消失。三种情况都源于同一个错误假设:Windows VPN 配置文件是 VPN 软件的一部分。

并非如此。配置文件是电话簿文件中的一条连接记录。删除它只会在一个范围内、从一个存储中删掉那条记录。客户端、它的证书,以及网关对你凭据的信任,都原封不动地留在原处。

Remove-VpnConnection 实际删除的是什么

原生配置文件位于 rasphone.pbk:每个用户配置文件下有一个电话簿,ProgramData 下有一个计算机范围的电话簿。Get-VpnConnection 列出每用户条目;加上 -AllUserConnection 则列出计算机范围的条目。同一个名称可以同时存在于两个列表中,而这两条记录是彼此独立的对象。

Remove-VpnConnection -Name "Old Office" -Force 删除匹配的每用户记录。带 -AllUserConnection 的同一命令会删除计算机范围的记录,并且需要提升权限的 shell。无论哪种情况,该 cmdlet 只触及那条记录:不卸载、不清理证书、也不向服务器发送消息。Remove-VpnConnection 参考列出了各项参数,而两个 cmdlet 都支持 -WhatIf。

所以,执行任何操作之前的问题不是如何删除 VPN 配置文件。而是你正在看的是两条记录中的哪一条。预览可以一行给出答案:

Get-VpnConnection -AllUserConnection | Select-Object Name, ServerAddress
Remove-VpnConnection -Name "Old Office" -AllUserConnection -WhatIf

如果预览报告没有任何匹配,说明你在错误的范围,另一条命令会找到该条目。如果它指出了目标,那你就找对了。

删除后条目为什么又回来了

几分钟内就重新出现的配置文件,从来就不该由你删除。在受管理的笔记本电脑上,连接通常来自部署:Intune 或组策略的 VPN 配置、网络团队推送的 CMAK 包,或者登录脚本。删掉记录,下一次策略刷新又会把它写回来。

线索是时间。受管理的配置文件会在刷新周期回来,而不是在下次重启时,并且会带着你刚刚移除的同一服务器地址和身份验证方法回来。而手动添加的配置文件则会保持消失。

从源头解决:让设备或用户的分配被移除,然后再删除本地记录。如果做不到,就把该条目视为受管理对象并放着不管,而不是安排一场总是失败的删除。

卸载客户端是另一项工作

第三方客户端各有自己的存储。Cisco Secure Client、GlobalProtect、OpenVPN GUI 和 WireGuard 隧道服务都把连接数据保存在 Windows 电话簿之外。删除原生条目不会动它们分毫,而卸载应用可能把原生条目留在原处,因为配置文件是单独导入的。

导入是常见的陷阱。如果你从 .pbk、.cmpbk 或下载的配置文件添加了连接,删除那个文件并不会删除它创建的记录,而再次打开该文件又会重新创建它。先移除条目,再删除文件,然后连接并断开一次,确认没有任何东西回来。

删除不是吊销

如果你删除配置文件是因为笔记本电脑丢失、机器被共用或配置文件泄露,那么本地删除几乎只是表面功夫。在运维人员吊销之前,网关仍然信任那张证书或预共享密钥。删除记录只能阻止这台机器发起新连接;它阻止不了凭据的副本在别处连接。

在授予访问权限的一侧执行吊销:把证书从受信任列表中撤下,禁用账户,轮换密钥。然后再清理本地配置文件。顺序反过来,你最终会得到一台没有配置文件、凭据却仍然可用的机器。

在宣告完成之前做四步检查

整个过程大约需要一分钟,几乎能抓住每一次错误范围的删除:

  1. 列出两个范围,写下确切的名称和服务器地址。
  2. 对匹配的范围用 -WhatIf 运行删除。
  3. 去掉 -WhatIf 再运行一次;如果条目属于所有用户,请提升权限。
  4. 重新列出两个范围,重新打开设置,并确认你的其他连接仍然可用。

如果第 4 步仍然显示该条目,说明删除悄悄针对了另一个范围。如果条目过一会儿又回来,你面对的是一个部署。如果两个 cmdlet 列表都为空而设置仍显示它,请关闭并重新打开该页面,因为设置缓存列表的时间比电话簿保留记录的时间更长。

接下来:判断该条目是本地残留还是受管理对象。残留可以放心删一次就忘掉。受管理对象需要先更改分配,否则你的删除只是一场必输的竞赛。而如果真正的目的是切断访问,那么网关上的改动远比你对配置文件做的任何事情都重要。

相关文章