搜索结果把一个 .pbk 文件递到你手里,键名看着眼熟,最顺手的做法是把它当成适用于任何 Windows VPN 的可移植架构。但它并不是。这种格式从属于某个所有者,而同一个键的含义会因写入它的所有者不同而改变。先读清作用范围,才能避免一次文档考证变成一次没有依据的修改。

四个所有者,四类读取方

四个不同的所有者会写出看起来相似的文件。按用户的原生连接落进当前用户的电话簿,而所有用户的连接落进全机范围的存储,主机上每个账户都能读取。RRAS 服务器为自身的路由角色保留按需拨号配置,第三方客户端也可能维护自己的格式,仅仅共用了同一个扩展名。同一个扩展名,四个读取方,四套规则。

显示名称相同并不等于两条记录是同一回事,在两者之间复制键,等于假设某个管理程序会尊重它从未记录过的含义。所有者还决定了谁能改动这个文件:按用户的配置文件是用户自己的选择,全机范围的配置文件是管理决策,而服务器上的按需拨号条目则是在其自身变更管控之下的路由配置。因此,所有权一旦判断错,先出现的是权限问题,然后才是格式问题。

判断所有者要看管理这条连接的组件,而不是看文件本身。文件只是产物;读取哪些键、何时读取,由管理组件决定。先读产物、再找管理方,正是人们最后去改一个根本没人读取的字段的原因。

公开格式在哪里不再描述你的文件

在 RRAS 管理协议里,电话簿是管理客户端写入、路由服务读取的纯文本,所以 MS-RRASM 规范 描述的是面向服务器的按需拨号设置,而不是桌面配置文件。结构恰恰是平铺式阅读会毁掉的部分。一个条目可以带多个介质块,每个介质块又带设备块,设备块再带单个号码的块。因此同一个键可能出现在不止一处,含义还各不相同。

读一个键要连同它所在的节区和版本说明一起读,也不要从桌面界面里同名复选框倒推它的取值。文档里出现眼熟的键,并不能证明它覆盖了某个无关原生配置文件的每一个字段。节区规则也不是把桌面电话簿改写成服务器格式的许可。

OwnerWhat reads the fileWhat a key means there
Per-user native connectionThe user's own connection managerA property of that user profile
All-user native connectionThe machine-wide connection storeA property shared by everyone on the host
RRAS demand-dialThe RRAS service, using the documented hierarchyA field inside a media, device or number section
Third-party clientThat vendor's own parserWhatever that vendor documents, if anything

这张表是阅读辅助,而不是规范:它告诉你去问哪个读取方,读取方再告诉你字段的含义。当那个读取方是第三方解析器时,诚实的答案可能是:没有任何公开资料记录过这个字段。

该问 Windows,而不是问文件

对于原生连接,应当向 Windows 请求配置文件,而不是去读文件,因为带类型的属性才是被记录的表面,也是受支持的变更唯一会改动的东西。下面两条命令分别读取 两个原生存储。如果配置文件在两个存储里都不存在,管理它的客户端就没有使用原生机制,任何原生 cmdlet 也描述不了它。

Get-VpnConnection -Name 'Field Ops'
Get-VpnConnection -AllUserConnection | Select-Object Name, ServerAddress, TunnelType

为部署而不是为查看,被记录的路径是带命名架构的受管配置文件设置,而不是在文本或二进制块里做数值编辑。配置文件定义描述的是受支持的设置,它并不提供配置文件所依赖的证书和私钥。注册是另一个拥有自身权限的流程,而读懂一个电话簿键,从来没有分发过私钥。请把两条路径分开规划,否则第一次证书下发就会变成第二次事故。

先是一个属性,然后是围绕它的生命周期

保存下来的值不等于已经生效的值。在一次获批的变更之后,要新开一条连接,检查配置文件安装的路由、它继承的解析器策略,以及它本该启用的操作。复用一条早就开着的会话,测到的是旧设置,只会得出假阴性。

在对原始文件动手之前,先把文件复制到一旁,因为带多条条目的电话簿是共享产物,而一次重写整个文件的目标修改,影响范围比这次变更本身更大。保持无关条目不动,并在新配置通过验证之前保留原有受保护配置。如果某个必需字段对你手上真正持有的所有者和版本没有记录,就把它记成一条待解决的支援问题。从另一台机器的文件里凭空推断编码,正是让一个能用的配置文件变成没有参照点的调试项目的方式。

每一步的纪律都一样:点明所有者,点明节区,再点明受支持的操作。除此之外的一切,都是附了一句引用的猜测。

相关文章