Add-VpnConnection: varför PSK:n går sönder och varför adressen blir kvar
PowerShell expanderar en i förväg delad nyckel inom dubbla citattecken innan cmdleten sparar den, och en tunnel som kör behåller den gamla adressen tills du ansluter igen.
En Windows VPN-profil är en post i en telefonbok, och PowerShell är ett sätt att redigera den posten. Av den skillnaden följer två fel: en i förväg delad nyckel som kommer till servern redan skadad, och en serveradress som ser uppdaterad ut men inte är den nästa tunnel ringer. Båda syns lättare om du behandlar profilen som sparat tillstånd och inte som ett kommando du körde. Genomgången följer ordningen ändringarna sker i: skapa, ändra, omfång, läsa tillbaka.
Bygg profilen med en bokstavlig nyckel
Add-VpnConnection tar emot den i förväg delade L2TP-nyckeln via -L2tpPsk. PowerShell bearbetar strängen innan cmdleten får den, och inom dubbla citattecken inleder ett dollartecken en variabelreferens medan en backtick inleder en escape. En nyckel som innehåller något av dem kommer kortare, eller med ett annat tecken, och profilen skapas med den felaktiga hemligheten.
Sedan visar sig felet vid IPsec-autentiseringen, där tunneln vägrar resa sig. Det är därför ett citatteckensfel så ofta rapporteras som ett problem på serversidan: profilen finns, namnet stämmer och hemligheten är tyst fel.
| 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 |
Enkla citattecken är lösningen, och de måste omsluta hela värdet. Om posten redan finns med en dålig nyckel ersätter -Force den, eller ta bort och skapa profilen på nytt och testa sedan med en ny anslutning:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Håll den riktiga hemligheten utanför shell-historiken och delade skript. Läs den vid körning från det godkända arkivet och skicka variabeln i stället för det bokstavliga, vilket helt undviker citatteckensproblemet.
Ändra adressen och anslut sedan igen
Set-VpnConnection tar mellanslagsseparerade parametrar, inte tilldelningssyntax. Att skriva -ServerAddress = "203.0.113.10" skickar en extra token, och cmdleten ger antingen ett fel eller sparar något du inte avsåg. Rätt form är -Name "Office L2TP" -ServerAddress 203.0.113.10.
Även med rätt syntax når ändringen inte en tunnel som redan är uppe. En etablerad anslutning behåller adressen den ringde till tills den kopplas ned, så ett test av samma session bevisar ingenting om det nya värdet. Koppla ned, redigera, anslut igen och bekräfta motpartens adress i anslutningsinformationen.
Vissa egenskaper kan inte ändras på plats. När cmdleten vägrar, notera de befintliga parametrarna, ta bort profilen och skapa den igen med de rättade värdena, och behåll de ursprungliga inställningarna för tunnel och autentisering. Ett skript som bara behöver ändra telefonnumret kan redigera telefonboksposten via RAS API i stället för att återskapa allt. Vilken väg du än väljer, bekräfta de sparade värdena efteråt i stället för att lita på kommandots tystnad.
Veta vilken telefonbok du redigerade
En profil per användare ligger i den användarens mapp för nätverksanslutningar, och en profil för alla användare ligger i den maskinvida mappen under programdataträdet. Det är olika poster med olika omfång, och att redigera den ena lämnar den andra orörd.
Därför kan en ändring se ut att försvinna: skriptet körde under ett konto och testet under ett annat. Använd -AllUserConnection när profilen tillhör maskinen, och kontrollera samma omfång när du läser den tillbaka.
Läs tillbaka profilen innan du testar
Fråga Windows vad det sparade i stället för vad du skickade:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Jämför den utskriften med avsikten och starta sedan en ny anslutning. Om uppringningen misslyckas, kontrollera RAS-klientloggen i Loggboken innan du ändrar profilen igen, eftersom loggen namnger steget som misslyckades.
Håll autentiseringsdesignen intakt medan du redigerar. Ett kommando som ändrar adressen men tappar certifikatet eller EAP-konfigurationen ger ett fel som verkar orelaterat till redigeringen, och att exportera den fungerande profilen i förväg ger dig något att återställa i stället för en gissning.