Daar is geen Import-VpnProfile-cmdlet nie, en die een wat die naaste daaraan lyk, Add-VpnConnection, lees nooit 'n .ovpn- of .conf-lêer nie. Dit stel 'n inheemse Windows-profiel saam uit die parameters wat jy deurgee, en daarom is die eerste kontrolepunt hier die lêerformaat en nie die opdragreël nie. As die gateway SSTP praat, IKEv2, L2TP/IPsec of PPTP, kan Windows die profiel besit en geld die res van die lys. As jy 'n OpenVPN- of WireGuard-lêer gekry het, stop by stap een: daardie kliënte besit hul eie invoerders.

Stap 1: Bevestig watter profiel Windows werklik kan besit

Voer Get-Command -Module VpnClient op die masjien uit voordat jy enigiets anders doen. Windows 10, Windows 11 en Server 2016 of later lewer die module; as dit ontbreek, sal geen gekopieerde skrip hierdie gasheer 'n inheemse profiel laat aanvaar nie. Die cmdlets wat saak maak, is Add-VpnConnection, Get-VpnConnection en Remove-VpnConnection, en die parameterlys in die Add-VpnConnection-verwysing is die moeite werd om een keer volledig te lees.

Inheems beteken die Windows VPN-stapel beëindig die tonnel. Dit dek IKEv2, dikwels met 'n masjiensertifikaat; SSTP, wat TLS is met gebruiker- of sertifikaatverifikasie binne; en L2TP/IPsec met 'n vooraf gedeelde sleutel. 'n .ovpn-lêer is 'n OpenVPN-skrip, nie 'n Windows-verbinding nie: dit dra voorskrifte soos remote, cipher of tls-auth wat die Windows-stapel glad nie ken nie. 'n WireGuard .conf is dieselfde storie met PrivateKey en AllowedIPs; om die een in die ander te omskep is nie 'n parameterkeuse nie, maar 'n ander tonnelimplementering.

Daar is 'n derde tak. As 'n administrateur vir jou 'n VPNv2 CSP XML-dokument of 'n Intune-profiel gee, is dit die MDM-pad, wat deur die provisioning-stapel toegepas word eerder as deur Add-VpnConnection. Moenie daardie nodusname in PowerShell-parameters vertaal nie; vra eerder watter meganisme die XML toepas.

Stap 2: Pas die tonneltipe by die verifikasiemetode

-TunnelType en -AuthenticationMethod is aparte parameters, en die gateway gee net om die kombinasie. Kry die een reg en die ander verkeerd en jy kry 'n profiel wat aan niks koppel nie, of wat vasval met die tonnel reeds op. Stel albei eksplisiet in plaas daarvan om 'n verstek te vertrou wat vir 'n ander diens gekies is.

  • IKEv2 met MachineCertificate: die kliënt bied 'n rekenaarsertifikaat aan; stel ook -EncryptionLevel Required in.
  • SSTP met Eap: eers die TLS-tonnel, dan PEAP/MSCHAPv2 of 'n sertifikaat binne EAP. Dit het die XML in stap 3 nodig.
  • SSTP, L2TP of PPTP met MSChapv2, Chap of Pap: gewone gebruikernaam en wagwoord, geen EAP-blob nie.
  • L2TP met MSChapv2 en -Lt2pPsk: die PSK dek die IPsec-helfte, die gebruiker dek PPP; albei moet by die bediener pas.

'n Splat hou die waardes op een plek:

$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 gee die objek terug wat Windows pas geskryf het, so jy kan dit sonder 'n tweede oproep inspekteer. As die naam al bestaan, weier die cmdlet om te hardloop; -Force oorskryf dit, wat die verkeerde refleks op 'n produksielaptop is, want dit gooi stilweg weg wat iemand met die hand opgestel het.

Stap 3: Gee die geloofsbriewe op die regte manier oor

Wagwoorde, vooraf gedeelde sleutels en EAP-blobs is waar hierdie skrips gewoonlik breek. -EapConfigXmlStream wil 'n XmlDocument hê, nie 'n pad nie, so lees en cast die lêer eers. Om 'n string deur te gee lewer 'n omskakelingsfout wat soos 'n skemaprobleem lyk en mense laat XML herskryf wat nooit verkeerd was nie.

$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

Daardie XML is nie iets om uit 'n blogbrokkie te bedink nie. Dit noem die EAP-metodetipe en die innerlike verifikasie, en die gateway vergelyk albei met sy beleid. 'n Verkeerde innerlike metode misluk nadat die TLS-handdruk voltooi is, wat presies soos 'n slegte wagwoord lyk en nie een is nie. Kry die XML by wie die gateway bedryf, of voer dit uit uit 'n profiel wat reeds werk.

Vir IKEv2 is die sertifikaathelfte 'n soektog in die stoort. -MachineCertificateIssuerFilter neem 'n sertifikaatobjek, en Windows gebruik dit om 'n bruikbare kliëntsertifikaat in LocalMachine\My te vind. Die sertifikaat het 'n private sleutel en 'n ketting nodig wat die bediener vertrou; as enige een ontbreek, misluk verifikasie sonder nuttige detail, so kyk eers in die stoort:

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

Hou geheime uit die skriplêer. 'n PSK wat op die opdragreël deurgegee of in 'n .ps1 ingebak word, beland in transkripsies, gestoorde sessies en gedeelde pakhuise, en -RememberCredential kas gebruiker-geloofsbriewe vir later, wat 'n eenmalige toets in 'n blywende toestemming verander.

Stap 4: Besluit die omvang voor die eerste lopie

Dieselfde cmdlet skryf na twee verskillende telefoonboeke. Sonder -AllUserConnection behoort die profiel aan jou en woon dit onder %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Daarmee, vanaf 'n verhoogde opdragreël, gaan die profiel na %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk en is dit vir elke rekening sigbaar, insluitend die aanmeldskerm.

Omvang is nie cosmeties nie. 'n All-gebruiker-profiel is wat 'n diensrekening, 'n geskeduleerde taak of 'n vooraanmelding-scenario kan gebruik; 'n per-gebruiker-profiel is vir al drie onsigbaar. Die objekte word ook anders gelees: Get-VpnConnection lys die huidige gebruiker se inskrywings, Get-VpnConnection -AllUserConnection lys die masjienwye. Kies een nou, en hanteer 'n latere verandering as verwyder en herskep eerder as 'n wysiging:

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

Stap 5: Toets wat 'n tonnel werklik moet lewer

'n Gekoppelde ikoon bewys die tonnel het opgekom en niks anders nie. Koppel eers vanaf die opdragreël sodat mislukkings as teks opdaag, nie as 'n dialoog nie, en lees dan terug wat Windows aangeteken het:

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

Die twee mislukkings wat gebruikers rapporteer terwyl die status steeds Connected sê, is DNS en roetering. Los 'n interne naam op en kyk watter bediener geantwoord het; 'n profiel sonder -DnsSuffix kan perfek tonnel en steeds elke intranet-soektog faal. Kyk dan na die verstekroete: met split tunneling af moet die 0.0.0.0/0-roete met die laagste metriek in die VPN-koppelvlak wys, en met dit aan net die prefikse wat jy verwag. As albei reg lyk en verkeer steeds sterf, is die probleem verby die profiel, in beleid of die gateway-filter.

Wanneer die verbinding heeltemal misluk, vernou die kode die stap om te herbesoek:

  • 691: die gateway het die geloofsbriewe verwerp. Gaan terug na stap 3, nie na die tonnel nie.
  • 809: die IKEv2-handdruk het nooit voltooi nie. Kyk na UDP 500 en 4500, en sertifikaatvertroue.
  • 789: die L2TP/IPsec-vooraf-gedeelde sleutel ontbreek of is verkeerd.
  • 868: die bedienernaam het nie opgelos nie. Maak DNS reg voordat jy die profiel wysig.

Hou die werkende opdrag langs die instellings wat dit kodeer, sodat die volgende persoon kan herbou eerder as om die profiel uit die UI te herontleed. As jy wel moet herbou, verwyder die inskrywing en herskep dit uit dieselfde parameters; om 'n half opgestelde profiel te pleister laat verouderde roetes en verifikasietoestand agter. En as die lêer nooit inheems was nie, gaan terug na die kliënt wat dit besit. 'n .ovpn wat as 'n IKEv2-profiel vermom is, is nie 'n invoer nie, dit is 'n ondersteuningskaartjie.

Verwante artikels