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

Сначала прочитайте код ошибки

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

Зафиксируйте код возврата на том же шаге, который выполняет дозвон. Следующая команда в скрипте перезапишет его, и настоящий код исчезнет к тому моменту, когда кто-то прочитает журнал.

rasdial "Office"; if ($LASTEXITCODE -ne 0) { Write-Output "failed: $LASTEXITCODE" }

Убедитесь, что запись в телефонной книге существует

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

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

Get-VpnConnection -Name "Office" | Format-List Name, ServerAddress, ConnectionStatus
dir "%APPDATA%\Microsoft\Network\Connections\Pbk"
dir "%PROGRAMDATA%\Microsoft\Network\Connections\Pbk"

Создайте профиль с помощью Add-VpnConnection

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

Вы всё ещё можете вручную вставить раздел подключения в rasphone.pbk, но ничто не проверяет эту правку. Один неверный ключ даёт профиль, который ни с чем не аутентифицируется, а возникающая ошибка выглядит как удалённая неисправность, а не как опечатка.

Add-VpnConnection -Name "Office" -ServerAddress vpn.corp.internal \
  -TunnelType Ikev2 -AuthenticationMethod Eap -EncryptionLevel Required

Согласуйте сеанс с хранилищем учётных данных

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

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

Оставьте автоматический триггер таким, каким вы его нашли

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

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

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

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