Профиль VPN в Windows — это запись в телефонной книге, а PowerShell — один из способов редактировать эту запись. Из этого различия следуют две неудачи: предварительно общий ключ, который приходит на сервер уже повреждённым, и адрес сервера, который выглядит обновлённым, но не является тем, куда позвонит следующий туннель. И то и другое проще увидеть, если рассматривать профиль как сохранённое состояние, а не как выполненную команду. Разбор идёт в порядке изменений: создание, изменение, область, обратное чтение.

Создайте профиль с буквальным ключом

Add-VpnConnection принимает предварительно общий ключ L2TP через -L2tpPsk. PowerShell обрабатывает строку до того, как командлет её получит, и внутри двойных кавычек знак доллара начинает ссылку на переменную, а backtick начинает escape. Ключ, содержащий что-либо из этого, приходит короче или с другим символом, и профиль успешно создаётся с неверным секретом.

Затем сбой проявляется при проверке подлинности IPsec, где туннель отказывается подниматься. Поэтому ошибку кавычек так часто сообщают как проблему на стороне сервера: профиль существует, имя правильное, а секрет тихо неверен.

How you write itWhat PowerShell doesResult
"p@ss$word!42"Expands $word as a variableStored key is truncated
Double-quoted with an escape characterConsumes the next character as an escapeOne character disappears
'p@ss$word!42'Keeps the literal charactersStored key matches the secret

Одинарные кавычки — это решение, и они должны охватывать всё значение. Если запись уже существует с плохим ключом, -Force заменяет его, либо удалите и создайте профиль заново, а затем проверьте новым подключением:

Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force

Держите настоящий секрет вне истории оболочки и общих сценариев. Читайте его во время выполнения из утверждённого хранилища и передавайте переменную вместо литерала, что полностью избегает проблемы с кавычками.

Измените адрес, затем переподключитесь

Set-VpnConnection принимает параметры, разделённые пробелами, а не синтаксис присваивания. Запись -ServerAddress = "203.0.113.10" передаёт лишний токен, и командлет либо выдаёт ошибку, либо сохраняет не то, что вы задумали. Правильная форма — -Name "Office L2TP" -ServerAddress 203.0.113.10.

Даже при правильном синтаксисе изменение не доходит до уже поднятого туннеля. Установленное соединение держит адрес, на который звонило, пока не будет отключено, поэтому проверка той же сессии ничего не доказывает о новом значении. Отключитесь, отредактируйте, подключитесь снова и подтвердите адрес партнёра в сведениях о подключении.

Некоторые свойства нельзя изменить на месте. Когда командлет отказывает, запишите существующие параметры, удалите профиль и создайте его заново с исправленными значениями, и сохраните исходные настройки туннеля и проверки подлинности. Сценарию, которому нужно изменить только номер телефона, можно отредактировать запись в телефонной книге через API RAS вместо того, чтобы создавать всё заново. Какой бы путь вы ни выбрали, после этого подтвердите сохранённые значения, а не полагайтесь на молчание команды.

Знайте, какую телефонную книгу вы редактировали

Профиль отдельного пользователя живёт в каталоге сетевых подключений этого пользователя, а профиль всех пользователей — в общем для машины каталоге под деревом данных программ. Это разные записи с разной областью, и правка одной оставляет другую нетронутой.

Поэтому изменение может выглядеть исчезнувшим: сценарий выполнялся под одной учётной записью, а проверка под другой. Используйте -AllUserConnection, когда профиль принадлежит машине, и проверяйте ту же область, когда читаете его обратно.

Прочитайте профиль обратно перед проверкой

Спросите Windows, что он сохранил, а не что вы передали:

Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod

Сравните этот вывод с замыслом, затем начните новое подключение. Если набор номера не удался, до очередного изменения профиля посмотрите журнал клиента RAS в средстве просмотра событий, потому что журнал называет этап, который не удался.

Сохраняйте схему проверки подлинности неизменной во время правки. Команда, которая меняет адрес, но теряет сертификат или конфигурацию EAP, даёт сбой, выглядящий не связанным с правкой, а экспорт работающего профиля заранее даёт то, что можно восстановить, вместо догадки.

Похожие статьи