A nova VPN apareceu, a autenticación funcionou, e unha VPN de terceiros que levaba dous anos na máquina desapareceu no mesmo reinicio. Nada no rexistro do despregamento o mencionou, porque nada no despregamento se ocupaba diso. O paquete substituíra a libreta de teléfonos global, e a outra conexión era unha entrada dese ficheiro. Isto é unha operación de copia comportándose exactamente como debe comportarse unha operación de copia.

A solución non é unha copia mellor. É non copiar o ficheiro.

Que contén realmente a libreta de teléfonos

Unha libreta de teléfonos é un contedor de definicións de conexión, non un perfil. As entradas por usuario viven no perfil do usuario, e as entradas para todos os usuarios viven na ruta ProgramData de ámbito de máquina, por iso un despregamento que escribe ese ficheiro toca todos os usuarios locais á vez. O mesmo ficheiro tamén leva entradas creadas por outros provedores, e de aí vén o dano colateral.

Unha definición de conexión tampouco é toda a historia. As rutas, a política de DNS, o material de CA de confianza e a identidade provéenos propietarios separados.

Averigüe que ámbito posúe o perfil

Enumere ambos os ámbitos antes de escribir nada. Get-VpnConnection devolve as entradas do usuario actual e Get-VpnConnection -AllUserConnection devolve as de ámbito de máquina, e o mesmo nome pode existir nos dous con axustes distintos. Decida que ámbito posúe o seu despregamento e anóteo, porque actualizar o ámbito equivocado deixa o usuario conectándose polo perfil antigo mentres o seu cambio queda nun ficheiro que ninguén le. Unha tarefa programada que se executa como SYSTEM tamén ve un conxunto de perfís distinto do usuario que iniciou sesión.

Nomear o propietario é o paso que impide que o seguinte enxeñeiro repita a copia do ficheiro completo.

Cree ou actualice a conexión con nome, nada máis

Para un perfil nativo de Windows, Add-VpnConnection crea unha entrada, e -AllUserConnection escolle o ámbito de máquina. Execúteo primeiro con -WhatIf, para que a previsualización chegue á súa transcrición e non a unha queixa de usuario:

Add-VpnConnection -Name 'Office VPN' -ServerAddress 'vpn.example.com' -TunnelType Ikev2 -AuthenticationMethod Eap -EapConfigXmlStream $approvedEapXml -AllUserConnection -WhatIf

O XML de EAP ten que vir dalgún sitio lexítimo: exportado dun perfil de referencia que funcione, ou xerado polas súas ferramentas de xestión para a pasarela real. Sen os axustes correctos de confianza do servidor, o perfil ou se conecta ao equivocado ou falla en todas partes, e ningunha das dúas é un despregamento exitoso.

Cando a entrada xa existe, compare os seus axustes e actualíceo con Set-VpnConnection en lugar de borrala e volver creala. Borrar é como unha configuración que funciona perde campos que ninguén documentou, e como entradas non relacionadas quedan atrapadas nunha limpeza ampla.

Comprobe se hai un segundo sistema de xestión que devolverá o perfil antigo na próxima actualización de directiva. Os pilotos fallan aquí máis a miúdo que no cmdlet.

Faga a proba nunha máquina que xa teña outra VPN

Escolla unha máquina de proba cunha entrada non relacionada de ámbito de máquina, despregue, e logo verifique tres cousas: o perfil novo aparece no ámbito previsto, a autenticación chega a un recurso privado, e a entrada non relacionada segue conectando. Despregue dúas veces máis e confirme que a segunda execución só cambia o perfil que posúe. Esa terceira comprobación atrapa un paquete que é idempotente para a súa propia entrada e destrutivo para todo o demais.

A retirada segue a mesma regra: Remove-VpnConnection -Name 'Office VPN' -AllUserConnection retira unha entrada e deixa o resto do ficheiro en paz.

Manteña dispoñible a configuración prevista anterior, para que unha reversión acoutada signifique reimportar un perfil en lugar de restaurar todo o estado da máquina.

Artigos relacionados