Add-VpnConnection: por qué se rompe la PSK y por qué se queda la dirección
PowerShell expande una clave precompartida entre comillas dobles antes de que el cmdlet la guarde, y un túnel en marcha conserva la dirección antigua hasta que te vuelves a conectar.
Un perfil VPN de Windows es una entrada de una agenda de teléfonos, y PowerShell es una forma de editar esa entrada. De esa distinción se derivan dos fallos: una clave precompartida que llega al servidor ya corrupta y una dirección de servidor que parece actualizada pero no es la que marcará el siguiente túnel. Ambos se ven más fácilmente si tratas el perfil como estado guardado y no como un comando que ejecutaste. El recorrido sigue el orden en que ocurren las ediciones: crear, cambiar, ámbito, volver a leer.
Crea el perfil con una clave literal
Add-VpnConnection acepta la clave precompartida de L2TP mediante -L2tpPsk. PowerShell procesa la cadena antes de que el cmdlet la reciba, y dentro de comillas dobles el signo de dólar inicia una referencia a variable mientras que un acento grave inicia un escape. Una clave que contenga cualquiera de los dos llega más corta, o con un carácter distinto, y el perfil se crea correctamente con el secreto equivocado.
Después el fallo aparece en la autenticación IPsec, donde el túnel se niega a levantarse. Por eso un error de comillas se notifica tantas veces como un problema del lado del servidor: el perfil existe, el nombre es correcto y el secreto está silenciosamente mal.
| How you write it | What PowerShell does | Result |
|---|---|---|
| "p@ss$word!42" | Expands $word as a variable | Stored key is truncated |
| Double-quoted with an escape character | Consumes the next character as an escape | One character disappears |
| 'p@ss$word!42' | Keeps the literal characters | Stored key matches the secret |
Las comillas simples son la solución, y deben envolver todo el valor. Si la entrada ya existe con una clave mala, -Force la reemplaza, o elimina y vuelve a crear el perfil y luego prueba con una conexión nueva:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Mantén el secreto real fuera del historial del intérprete y de los scripts compartidos. Léelo en tiempo de ejecución desde el almacén aprobado y pasa la variable en lugar del literal, lo que evita por completo el problema de las comillas.
Cambia la dirección y luego vuelve a conectar
Set-VpnConnection acepta parámetros separados por espacios, no sintaxis de asignación. Escribir -ServerAddress = "203.0.113.10" pasa un token extra, y el cmdlet o bien da error o bien guarda algo que no pretendías. La forma correcta es -Name "Office L2TP" -ServerAddress 203.0.113.10.
Incluso con la sintaxis correcta, el cambio no llega a un túnel que ya está levantado. Una conexión establecida conserva la dirección a la que marcó hasta que se desconecta, así que probar la misma sesión no demuestra nada sobre el valor nuevo. Desconecta, edita, vuelve a conectar y confirma la dirección del par en los detalles de la conexión.
Algunas propiedades no se pueden cambiar en el sitio. Cuando el cmdlet se niega, anota los parámetros existentes, elimina el perfil y vuelve a crearlo con los valores corregidos, y conserva la configuración original del túnel y de la autenticación. Un script que solo necesita cambiar el número de teléfono puede editar la entrada de la agenda mediante la API RAS en lugar de recrearlo todo. Elijas la ruta que elijas, confirma después los valores guardados en vez de fiarte del silencio del comando.
Saber qué agenda editaste
Un perfil por usuario vive en el directorio de conexiones de red de ese usuario, y un perfil para todos los usuarios vive en el directorio de toda la máquina, bajo el árbol de datos de programa. Son entradas distintas con ámbitos distintos, y editar una deja la otra intacta.
Por eso un cambio puede parecer que desaparece: el script se ejecutó con una cuenta y la prueba con otra. Usa -AllUserConnection cuando el perfil pertenece a la máquina, y comprueba el mismo ámbito cuando lo vuelvas a leer.
Vuelve a leer el perfil antes de probar
Pregunta a Windows qué guardó en lugar de qué le pasaste:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Compara esa salida con la intención y luego inicia una conexión nueva. Si la marcación falla, revisa el registro del cliente RAS en el Visor de eventos antes de volver a cambiar el perfil, porque el registro nombra la etapa que falló.
Mantén intacto el diseño de autenticación mientras editas. Un comando que cambia la dirección pero descarta el certificado o la configuración EAP produce un fallo que parece ajeno a la edición, y exportar el perfil que funciona antes te da algo que restaurar en lugar de una conjetura.