Import profil VPN dalam PowerShell dengan Add-VpnConnection
Add-VpnConnection hanya mencipta profil asli Windows. Padankan pasangan terowong dan pengesahan dengan gateway, tetapkan skop dengan sengaja, kemudian uji laluan dan DNS.
Tiada cmdlet Import-VpnProfile, dan yang paling hampir, Add-VpnConnection, tidak pernah membaca fail .ovpn atau .conf. Ia memasang profil asli Windows daripada parameter yang anda berikan, dan sebab itulah titik semakan pertama di sini ialah format fail, bukan baris arahan. Jika gateway bercakap SSTP, IKEv2, L2TP/IPsec atau PPTP, Windows boleh memiliki profil itu dan selebihnya senarai terpakai. Jika anda diberi fail OpenVPN atau WireGuard, berhenti pada langkah pertama: klien itu mempunyai pengimport mereka sendiri.
Langkah 1: Sahkan profil yang benar-benar boleh dimiliki Windows
Jalankan Get-Command -Module VpnClient pada mesin sebelum apa-apa lagi. Windows 10, Windows 11 dan Server 2016 atau lebih baru menyertakan modul ini; jika tiada, tiada skrip yang disalin akan membuat hos ini menerima profil asli. Cmdlet yang penting ialah Add-VpnConnection, Get-VpnConnection dan Remove-VpnConnection, dan rujukan Add-VpnConnection senarai parameternya patut dibaca sekali sepenuhnya.
Asli bermaksud tindanan VPN Windows menamatkan terowong. Ia merangkumi IKEv2, selalunya dengan sijil mesin; SSTP, iaitu TLS dengan pengesahan pengguna atau sijil di dalamnya; dan L2TP/IPsec dengan kunci yang dikongsi terlebih dahulu. Fail .ovpn ialah skrip OpenVPN, bukan sambungan Windows: ia membawa arahan seperti remote, cipher atau tls-auth yang tidak difahami oleh tindanan Windows. .conf WireGuard ialah kisah yang sama dengan PrivateKey dan AllowedIPs; menukar yang satu ke yang lain bukan pilihan parameter tetapi pelaksanaan terowong yang berbeza.
Ada cabang ketiga. Jika pentadbir menyerahkan dokumen XML VPNv2 CSP atau profil Intune, itu laluan MDM, dilaksanakan oleh tindanan penyediaan dan bukan oleh Add-VpnConnection. Jangan terjemah nama nod itu ke parameter PowerShell; sebaliknya tanya mekanisme mana yang menggunakan XML itu.
Langkah 2: Padankan jenis terowong dengan kaedah pengesahan
-TunnelType dan -AuthenticationMethod ialah parameter berasingan, dan gateway hanya mengambil berat tentang gabungannya. Satu betul dan satu lagi salah dan anda mendapat profil yang tidak bersambung ke apa-apa, atau tersekat sedangkan terowong sudah naik. Tetapkan kedua-duanya secara eksplisit daripada mempercayai nilai lalai yang dipilih untuk perkhidmatan lain.
- IKEv2 dengan MachineCertificate: klien mengemukakan sijil komputer; tetapkan juga -EncryptionLevel Required.
- SSTP dengan Eap: terowong TLS dahulu, kemudian PEAP/MSCHAPv2 atau sijil di dalam EAP. Ini memerlukan XML pada langkah 3.
- SSTP, L2TP atau PPTP dengan MSChapv2, Chap atau Pap: nama pengguna dan kata laluan biasa, tanpa blob EAP.
- L2TP dengan MSChapv2 dan -Lt2pPsk: PSK meliputi separuh IPsec, pengguna meliputi PPP; kedua-duanya mesti sepadan dengan pelayan.
Splat menyimpan nilai di satu tempat:
$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 mengembalikan objek yang baru ditulis Windows, jadi anda boleh memeriksanya tanpa panggilan kedua. Jika nama sudah wujud, cmdlet enggan berjalan; -Force menimpanya, dan itu refleks yang salah pada komputer riba pengeluaran kerana ia membuang secara senyap apa sahaja yang dikonfigurasikan seseorang secara manual.
Langkah 3: Serahkan bahan kelayakan dengan betul
Kata laluan, kunci yang dikongsi terlebih dahulu dan blob EAP ialah tempat skrip ini biasanya rosak. -EapConfigXmlStream mahukan XmlDocument, bukan laluan, jadi baca dan tukar fail itu dahulu. Menghantar rentetan menghasilkan ralat penukaran yang kelihatan seperti masalah skema dan menghantar orang menulis semula XML yang tidak pernah salah.
$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
-TunnelType Sstp -AuthenticationMethod Eap `
-EapConfigXmlStream $eap -EncryptionLevel RequiredXML itu bukan sesuatu yang direka daripada petikan blog. Ia menamakan jenis kaedah EAP dan pengesahan dalaman, dan gateway membandingkan kedua-duanya dengan dasarnya. Kaedah dalaman yang tidak sepadan gagal selepas jabat tangan TLS selesai, yang kelihatan tepat seperti kata laluan salah tetapi bukan. Ambil XML itu daripada pihak yang menjalankan gateway, atau eksport daripada profil yang sudah berfungsi.
Untuk IKEv2 bahagian sijil ialah carian dalam stor. -MachineCertificateIssuerFilter menerima objek sijil, dan Windows menggunakannya untuk mencari sijil klien yang boleh digunakan dalam LocalMachine\My. Sijil memerlukan kunci peribadi dan rantaian yang dipercayai pelayan; apabila salah satu tiada, pengesahan gagal tanpa butiran berguna, jadi periksa stor dahulu:
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
Select-Object Subject, Issuer, Thumbprint, NotAfterJauhkan rahsia daripada fail skrip. PSK yang diberikan pada baris arahan atau dibakar ke dalam .ps1 berakhir dalam transkrip, sesi yang disimpan dan repositori kongsi, dan -RememberCredential menyimpan kelayakan pengguna untuk kemudian, menjadikan ujian sekali sahaja sebagai kebenaran berterusan.
Langkah 4: Tentukan skop sebelum larian pertama
Cmdlet yang sama menulis ke dua buku telefon berbeza. Tanpa -AllUserConnection profil itu milik anda dan berada di bawah %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Dengannya, daripada prompt yang ditinggikan, profil pergi ke %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk dan kelihatan kepada setiap akaun, termasuk skrin log masuk.
Skop bukan kosmetik. Profil semua pengguna ialah apa yang boleh digunakan oleh akaun perkhidmatan, tugas berjadual atau senario sebelum log masuk; profil setiap pengguna tidak kelihatan kepada ketiga-tiganya. Objek juga dibaca secara berbeza: Get-VpnConnection menyenaraikan entri pengguna semasa, Get-VpnConnection -AllUserConnection menyenaraikan entri seluruh mesin. Pilih satu sekarang, dan anggap perubahan kemudian sebagai hapus dan cipta semula, bukan suntingan:
# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
-TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
-EncryptionLevel Required -AllUserConnectionLangkah 5: Uji apa yang sebenarnya perlu disampaikan terowong
Ikon bersambung membuktikan terowong naik dan tidak lebih. Sambung dari baris arahan dahulu supaya kegagalan tiba sebagai teks, bukan dialog, kemudian baca semula apa yang direkodkan Windows:
rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"Dua kegagalan yang dilaporkan pengguna semasa status masih berkata Connected ialah DNS dan penghalaan. Selesaikan nama dalaman dan periksa pelayan mana yang menjawab; profil tanpa -DnsSuffix boleh berterowong dengan sempurna dan masih gagal setiap carian intranet. Kemudian lihat laluan lalai: dengan terowong berpecah dimatikan, laluan 0.0.0.0/0 dengan metrik terendah sepatutnya menunjuk ke antara muka VPN, dan dengan ia dihidupkan hanya awalan yang anda jangkakan. Jika kedua-duanya kelihatan betul dan trafik masih mati, masalahnya melepasi profil, dalam dasar atau penapis gateway.
Apabila sambungan gagal sepenuhnya, kod menyempitkan langkah untuk dikunjungi semula:
- 691: gateway menolak kelayakan. Kembali ke langkah 3, bukan terowong.
- 809: jabat tangan IKEv2 tidak pernah selesai. Periksa UDP 500 dan 4500, serta kepercayaan sijil.
- 789: kunci yang dikongsi terlebih dahulu L2TP/IPsec tiada atau salah.
- 868: nama pelayan tidak diselesaikan. Betulkan DNS sebelum menyunting profil.
Simpan arahan yang berfungsi di sebelah tetapan yang dikodkannya, supaya orang seterusnya boleh membina semula dan bukannya merekayasa balik profil dari UI. Jika anda benar-benar perlu membina semula, hapus entri dan cipta semula dengan parameter yang sama; menampal profil yang separuh dikonfigurasikan meninggalkan laluan lapuk dan keadaan pengesahan. Dan jika fail itu tidak pernah asli, kembali kepada klien yang memilikinya. .ovpn yang berpakaian sebagai profil IKEv2 bukan import, ia tiket sokongan.