Add-VpnConnection: dlaczego PSK się psuje, a adres zostaje stary
PowerShell rozwija wcześniej udostępniony klucz w cudzysłowach przed zapisaniem go przez polecenie cmdlet, a działający tunel zachowuje stary adres, dopóki nie połączysz się ponownie.
Profil VPN w Windows to wpis w książce telefonicznej, a PowerShell to jeden ze sposobów edycji tego wpisu. Z tego rozróżnienia wynikają dwa błędy: wcześniej udostępniony klucz, który dociera do serwera już uszkodzony, oraz adres serwera, który wygląda na zaktualizowany, ale nie jest tym, na który zadzwoni następny tunel. Oba łatwiej zauważyć, gdy traktujesz profil jako zapisany stan, a nie jako polecenie, które uruchomiłeś. Omówienie idzie w kolejności zmian: utworzenie, zmiana, zakres, odczyt zwrotny.
Utwórz profil z dosłownym kluczem
Add-VpnConnection przyjmuje wcześniej udostępniony klucz L2TP przez -L2tpPsk. PowerShell przetwarza ciąg, zanim polecenie cmdlet go otrzyma, a w cudzysłowach znak dolara rozpoczyna odwołanie do zmiennej, natomiast backtick rozpoczyna sekwencję ucieczki. Klucz zawierający jedno z nich dociera krótszy lub z innym znakiem, a profil powstaje z błędnym sekretem.
Potem błąd ujawnia się przy uwierzytelnianiu IPsec, gdzie tunel odmawia podniesienia się. Dlatego błąd cudzysłowów tak często jest zgłaszany jako problem po stronie serwera: profil istnieje, nazwa jest poprawna, a sekret jest po cichu zły.
| 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 |
Cudzysłowy pojedyncze są rozwiązaniem i muszą obejmować całą wartość. Jeśli wpis już istnieje ze złym kluczem, -Force go zastępuje, albo usuń i utwórz profil ponownie, a następnie sprawdź nowym połączeniem:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Trzymaj prawdziwy sekret poza historią powłoki i współdzielonymi skryptami. Odczytuj go w czasie wykonania z zatwierdzonego magazynu i przekazuj zmienną zamiast literału, co całkowicie omija problem cudzysłowów.
Zmień adres, a potem połącz się ponownie
Set-VpnConnection przyjmuje parametry oddzielone spacjami, nie składnię przypisania. Zapis -ServerAddress = "203.0.113.10" przekazuje dodatkowy token, a polecenie cmdlet albo zgłasza błąd, albo zapisuje coś, czego nie zamierzałeś. Poprawna forma to -Name "Office L2TP" -ServerAddress 203.0.113.10.
Nawet przy poprawnej składni zmiana nie dociera do tunelu, który już działa. Ustanowione połączenie zachowuje adres, na który zadzwoniło, dopóki nie zostanie rozłączone, więc test tej samej sesji niczego nie dowodzi w kwestii nowej wartości. Rozłącz się, edytuj, połącz ponownie i potwierdź adres drugiej strony w szczegółach połączenia.
Niektórych właściwości nie można zmienić na miejscu. Gdy polecenie cmdlet odmawia, zapisz istniejące parametry, usuń profil i utwórz go ponownie z poprawionymi wartościami, i zachowaj pierwotne ustawienia tunelu oraz uwierzytelniania. Skrypt, który ma zmienić tylko numer telefonu, może edytować wpis w książce telefonicznej przez API RAS zamiast tworzyć wszystko od nowa. Którąkolwiek drogę wybierzesz, potem potwierdź zapisane wartości, a nie ufaj ciszy polecenia.
Wiedz, którą książkę telefoniczną edytowałeś
Profil jednego użytkownika mieszka w katalogu połączeń sieciowych tego użytkownika, a profil wszystkich użytkowników w katalogu obejmującym całą maszynę, pod drzewem danych programów. To różne wpisy o różnym zakresie, a edycja jednego pozostawia drugi nietknięty.
Dlatego zmiana może wyglądać na zaginioną: skrypt działał na jednym koncie, a test na innym. Użyj -AllUserConnection, gdy profil należy do maszyny, i sprawdź ten sam zakres, gdy go odczytujesz.
Odczytaj profil, zanim przetestujesz
Zapytaj Windows, co zapisał, a nie co przekazałeś:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Porównaj ten wynik z zamiarem, a potem rozpocznij nowe połączenie. Jeśli wybieranie numeru się nie uda, przed kolejną zmianą profilu sprawdź dziennik klienta RAS w Podglądzie zdarzeń, ponieważ dziennik wskazuje etap, który zawiódł.
Zachowaj nietknięty projekt uwierzytelniania podczas edycji. Polecenie, które zmienia adres, ale gubi certyfikat lub konfigurację EAP, daje błąd wyglądający na niezwiązany z edycją, a wcześniejszy eksport działającego profilu daje coś do przywrócenia zamiast domysłu.