Non existe ningún cmdlet Import-VpnProfile, e o que máis se lle parece, Add-VpnConnection, nunca le un ficheiro .ovpn ou .conf. Constrúe un perfil nativo de Windows a partir dos parámetros que lle pasas, e por iso o primeiro punto de comprobación aquí é o formato do ficheiro e non a liña de comandos. Se a pasarela fala SSTP, IKEv2, L2TP/IPsec ou PPTP, Windows pode ser dono do perfil e o resto da lista aplícase. Se lle deron un ficheiro OpenVPN ou WireGuard, detéñase no primeiro paso: eses clientes teñen os seus propios importadores.

Paso 1: Confirmar o perfil que Windows pode realmente posuír

Executa Get-Command -Module VpnClient na máquina antes de calquera outra cousa. Windows 10, Windows 11 e Server 2016 ou posterior inclúen o módulo; se falta, ningún script copiado fará que este equipo acepte un perfil nativo. Os cmdlets que importan son Add-VpnConnection, Get-VpnConnection e Remove-VpnConnection, e a lista de parámetros da referencia de Add-VpnConnection merece unha lectura completa.

Nativo significa que a pila VPN de Windows termina o túnel. Iso abrangue IKEv2, a miúdo cun certificado de máquina; SSTP, que é TLS con autenticación de usuario ou de certificado dentro; e L2TP/IPsec cunha clave precompartida. Un ficheiro .ovpn é un script de OpenVPN, non unha conexión de Windows: leva directivas como remote, cipher ou tls-auth das que a pila de Windows non ten nin idea. Un .conf de WireGuard conta a mesma historia con PrivateKey e AllowedIPs; converter un no outro non é unha elección de parámetros senón outra implementación de túnel.

Hai unha terceira rama. Se un administrador lle entrega un documento XML de VPNv2 CSP ou un perfil de Intune, esa é a vía MDM, aplicada pola pila de aprovisionamento e non por Add-VpnConnection. Non traduza eses nomes de nodo a parámetros de PowerShell; pregunte, no seu lugar, que mecanismo aplica o XML.

Paso 2: Emparellar o tipo de túnel co método de autenticación

-TunnelType e -AuthenticationMethod son parámetros separados, e á pasarela só lle importa a combinación. Un ben e o outro mal e obtén un perfil que non conecta con nada, ou que se queda bloqueado co túnel xa levantado. Estableza ambos de forma explícita en vez de confiar nun valor predeterminado escollido para outro servizo.

  • IKEv2 con MachineCertificate: o cliente presenta un certificado de equipo; estableza tamén -EncryptionLevel Required.
  • SSTP con Eap: primeiro o túnel TLS, despois PEAP/MSCHAPv2 ou un certificado dentro de EAP. Isto necesita o XML do paso 3.
  • SSTP, L2TP ou PPTP con MSChapv2, Chap ou Pap: usuario e contrasinal simples, sen bloque EAP.
  • L2TP con MSChapv2 e -Lt2pPsk: a PSK cobre a metade IPsec, o usuario cobre PPP; ambas deben coincidir co servidor.

Un splat mantén os valores nun só lugar:

$p = @{
  Name                 = "Corp IKEv2"
  ServerAddress        = "vpn.example.com"
  TunnelType           = "Ikev2"
  AuthenticationMethod = "MachineCertificate"
  EncryptionLevel      = "Required"
  SplitTunneling       = $false
  DnsSuffix            = "corp.example.com"
}
Add-VpnConnection @p -PassThru

-PassThru devolve o obxecto que Windows acaba de escribir, así que pode inspeccionalo sen unha segunda chamada. Se o nome xa existe, o cmdlet négase a executarse; -Force sobrescríbeo, e ese é o reflexo equivocado nun portátil de produción, porque descarta en silencio o que alguén configurou á man.

Paso 3: Entregar o material de credenciais correctamente

Os contrasinais, as claves precompartidas e os bloques EAP son onde estes scripts adoitan romper. -EapConfigXmlStream quere un XmlDocument, non unha ruta, así que lea e converta o ficheiro primeiro. Pasar unha cadea produce un erro de conversión que parece un problema de esquema e leva a xente a reescribir un XML que nunca estivo mal.

$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
  -TunnelType Sstp -AuthenticationMethod Eap `
  -EapConfigXmlStream $eap -EncryptionLevel Required

Ese XML non se inventa a partir dun anaco de blog. Nomea o tipo de método EAP e a autenticación interna, e a pasarela compara ambos coa súa política. Un método interno que non coincide falla despois de completarse o aperto de mans TLS, o que parece exactamente un contrasinal incorrecto e non o é. Colla o XML de quen xestiona a pasarela, ou expórteo dun perfil que xa funcione.

Para IKEv2 a metade do certificado é unha busca no almacén. -MachineCertificateIssuerFilter toma un obxecto de certificado, e Windows úsao para atopar un certificado de cliente utilizable en LocalMachine\My. O certificado necesita unha clave privada e unha cadea na que o servidor confíe; cando falta calquera das dúas, a autenticación falla sen detalle útil, así que comprobe o almacén primeiro:

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
  Select-Object Subject, Issuer, Thumbprint, NotAfter

Manteña os segredos fóra do ficheiro de script. Unha PSK pasada na liña de comandos ou gravada nun .ps1 acaba en rexistros, sesións gardadas e repositorios compartidos, e -RememberCredential garda as credenciais do usuario para despois, convertendo unha proba puntual nunha concesión duradeira.

Paso 4: Decidir o ámbito antes da primeira execución

O mesmo cmdlet escribe en dúas axendas diferentes. Sen -AllUserConnection o perfil é seu e vive en %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Con el, desde unha consola elevada, o perfil vai a %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk e é visible para todas as contas, incluída a pantalla de inicio de sesión.

O ámbito non é cosmético. Un perfil para todos os usuarios é o que pode usar unha conta de servizo, unha tarefa programada ou un escenario previo ao inicio de sesión; un perfil por usuario é invisible para os tres. Os obxectos tamén se len de forma distinta: Get-VpnConnection lista as entradas do usuario actual, Get-VpnConnection -AllUserConnection as de toda a máquina. Escolla un agora, e trate un cambio posterior como borrar e recrear en vez de editar:

# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
  -TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
  -EncryptionLevel Required -AllUserConnection

Paso 5: Probar o que un túnel ten que entregar de verdade

Unha icona conectada proba que o túnel levantou e nada máis. Conéctese primeiro desde a liña de comandos para que os fallos cheguen como texto e non como un diálogo, e despois lea o que Windows rexistrou:

rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
  Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Os dous fallos que os usuarios denuncian mentres o estado aínda di Connected son o DNS e o enrutamento. Resolva un nome interno e comprobe que servidor respondeu; un perfil sen -DnsSuffix pode facer un túnel perfecto e fallar todas as buscas da intranet. Despois mire a ruta predeterminada: coa tunelización dividida desactivada, a ruta 0.0.0.0/0 de menor métrica debería apuntar á interface VPN, e activada, só deberían os prefixos que espera. Se ambas parecen correctas e o tráfico segue morrendo, o problema está máis alá do perfil, na política ou no filtro da pasarela.

Cando a conexión falla de vez, o código limita o paso ao que volver:

  • 691: a pasarela rexeitou as credenciais. Volva ao paso 3, non ao túnel.
  • 809: o aperto de mans IKEv2 nunca se completou. Comprobe UDP 500 e 4500, e a confianza do certificado.
  • 789: falta a clave precompartida de L2TP/IPsec ou é incorrecta.
  • 868: o nome do servidor non se resolveu. Corrixa o DNS antes de editar o perfil.

Manteña o comando que funciona xunto aos axustes que codifica, para que a seguinte persoa poida reconstruír en vez de enxeñar ao revés o perfil desde a interface. Se ten que reconstruír, borre a entrada e créea de novo cos mesmos parámetros; parchear un perfil a medio configurar deixa atrás rutas obsoletas e estado de autenticación. E se o ficheiro nunca foi nativo, volva ao cliente que o posúe. Un .ovpn vestido de perfil IKEv2 non é unha importación, é un tícket de soporte.

Artigos relacionados