Add-VpnConnection: proč se PSK poškodí a adresa zůstane stará
PowerShell rozvine předem sdílený klíč v uvozovkách dřív, než ho cmdlet uloží, a běžící tunel drží starou adresu, dokud se nepřipojíte znovu.
Profil VPN ve Windows je záznam v telefonním seznamu a PowerShell je jeden ze způsobů, jak tento záznam upravit. Z tohoto rozlišení plynou dvě selhání: předem sdílený klíč, který na server dorazí už poškozený, a adresa serveru, která vypadá aktualizovaně, ale není ta, na kterou bude volat příští tunel. Obojí je snazší vidět, když k profilu přistupujete jako k uloženému stavu, ne jako k příkazu, který jste spustili. Postup jde v pořadí, v jakém úpravy probíhají: vytvoření, změna, rozsah, zpětné čtení.
Vytvořte profil s doslovným klíčem
Add-VpnConnection přijímá předem sdílený klíč L2TP přes -L2tpPsk. PowerShell zpracuje řetězec dřív, než ho cmdlet obdrží, a uvnitř dvojitých uvozovek začíná znak dolaru odkaz na proměnnou, zatímco backtick začíná escape. Klíč, který obsahuje kterýkoli z nich, dorazí kratší nebo s jiným znakem a profil se úspěšně vytvoří s nesprávným tajemstvím.
Selhání se pak projeví při ověřování IPsec, kde tunel odmítne vstát. Proto se chyba v uvozovkách tak často hlásí jako problém na straně serveru: profil existuje, jméno je správné a tajemství je tiše špatné.
| 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 |
Jednoduché uvozovky jsou řešením a musí obklopit celou hodnotu. Pokud záznam už existuje se špatným klíčem, -Force ho nahradí, nebo profil odeberte a vytvořte znovu a pak otestujte novým připojením:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Držte skutečné tajemství mimo historii shellu a sdílené skripty. Čtěte ho za běhu ze schváleného úložiště a předávejte proměnnou místo doslovné hodnoty, což problém s uvozovkami zcela obejde.
Změňte adresu a potom se znovu připojte
Set-VpnConnection přebírá parametry oddělené mezerami, ne syntaxi přiřazení. Zápis -ServerAddress = "203.0.113.10" předá další token a cmdlet buď selže, nebo uloží něco, co jste nezamýšleli. Správný tvar je -Name "Office L2TP" -ServerAddress 203.0.113.10.
Ani se správnou syntaxí se změna nedostane do tunelu, který už je nahoru. Navázané připojení drží adresu, na kterou volalo, dokud se nepřeruší, takže testování stejné relace nic o nové hodnotě nedokazuje. Odpojte se, upravte, připojte se znovu a potvrďte adresu protistrany v podrobnostech připojení.
Některé vlastnosti nelze měnit na místě. Když cmdlet odmítne, poznamenejte si stávající parametry, smažte profil a vytvořte ho znovu s opravenými hodnotami a zachovejte původní nastavení tunelu a ověřování. Skript, který potřebuje změnit jen telefonní číslo, může upravit záznam v seznamu přes RAS API, místo aby všechno vytvářel znovu. Ať zvolíte kteroukoli cestu, poté uložené hodnoty potvrďte, místo abyste věřili mlčení příkazu.
Vězte, který seznam jste upravili
Profil pro jednotlivého uživatele žije v adresáři síťových připojení tohoto uživatele a profil pro všechny uživatele v celostrojovém adresáři pod stromem programových dat. Jsou to různé záznamy s různým rozsahem a úprava jednoho nechá druhý nedotčený.
Proto může změna vypadat, že zmizela: skript běžel pod jedním účtem a test pod jiným. Použijte -AllUserConnection, když profil patří stroji, a při zpětném čtení zkontrolujte stejný rozsah.
Přečtěte profil zpět, než začnete testovat
Ptejte se Windows, co uložil, ne co jste předali:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Porovnejte tento výstup se záměrem a potom spusťte nové připojení. Pokud vytáčení selže, než profil znovu změníte, podívejte se do protokolu klienta RAS ve Zobrazení událostí, protože protokol pojmenuje fázi, která selhala.
Během úprav zachovejte návrh ověřování nedotčený. Příkaz, který změní adresu, ale zahodí certifikát nebo konfiguraci EAP, vytvoří selhání, které vypadá nesouvisející s úpravou, a export funkčního profilu předem vám dá co obnovit místo dohadu.