Почему Get-VpnConnection пропускает некоторые профили VPN в Windows
Get-VpnConnection отвечает на более узкий вопрос, чем предполагает название: одно собственное хранилище, одна область за раз и никакого представления о сторонних VPN-клиентах.
Введите Get-VpnConnection, ничего не возвращается, и расследование обычно на этом останавливается. Пустой вывод читается как доказательство, что на машине вообще нет VPN, даже когда туннель несёт трафик. Команда в порядке; предположение о том, что она перечисляет, — нет. Она читает одно собственное хранилище в одной области и ничего не знает о клиентах, которые держат свои профили.
Одно собственное хранилище на вызов
Начните с вызова без аргументов: он нацелен на профили учётной записи, под которой выполнен вход. Именно этот вызов большинство людей запускает первым:
Get-VpnConnection
Каждый возвращённый объект несёт Name, ServerAddress, TunnelType и ConnectionStatus, и этих четырёх полей достаточно, чтобы различить две записи в заявке. Профиль может месяцами стоять отключённым и всё равно оставаться в списке, потому что объект описывает сохранённую конфигурацию, а не живой трафик. Пустой результат здесь означает, что в хранилище данного пользователя для этой учётной записи ничего не было. Это гораздо более слабое утверждение, чем то, которое люди обычно в нём читают.
Телефонной книге всех пользователей нужен собственный запрос
Профили, обслуживающие каждую учётную запись, живут в отдельном списке, и вызов по умолчанию его никогда не читает. Это хранилище запрашивают явно:
Get-VpnConnection -AllUserConnection
Когда у сеанса не хватает прав, ждите ошибку отказа в доступе, а не пустой результат, и различайте два исхода: один означает, что смотреть нельзя, другой — что ничего не сохранено. Запишите область рядом с каждым именем, пока вывод перед вами, потому что более поздняя команда не напомнит, какое хранилище она запросила. Права — обычная причина, по которой коллега видит профиль, который вы видеть не можете. Наборы параметров описаны на справочной странице Get-VpnConnection, включая то, какие ключи относятся к какому набору.
Одно имя, два разных хранилища
Имя профиля уникально внутри своего хранилища, а не на всей машине, поэтому списки для одного пользователя и для всех пользователей могут каждый содержать профиль с именем Office. Обе записи могут указывать на разные серверы, использовать разные типы туннелей и нести разные учётные данные. Только одна из них — та запись, по которой пользователь щёлкает дважды. Запишите область, прежде чем трогать любую из них.
Удалить копию, которую никто не запускает, кажется безобидным в окне изменений. Это становится звонком в поддержку, когда ярлык пользователя перестаёт работать.
Клиенты, которые никогда не трогают собственный список
Профиль OpenVPN или WireGuard, импортированный в клиент поставщика, живёт в собственной конфигурации этого клиента, поэтому никогда не становится собственной записью Windows. Клиент запускает свой сервис, держит свой список и передаёт трафик через свой адаптер. Ничего из этого команда не сообщает, и ни один ключ области этого не покажет. На машине может быть три работающих туннеля и пустой собственный список.
Когда вместо этого нужен вид адаптеров, опросите адаптеры. Интерфейсы поставщиков называют себя сами, поэтому сопоставляйте фрагмент, а не точную строку:
Get-NetAdapter | Where-Object InterfaceDescription -match 'WireGuard|OpenVPN|TAP'
Созданные вручную собственные профили попадают в файл телефонной книги под профилем пользователя, а аналоги для всех пользователей лежат в копии для всей машины. Поэтому копирование хранилища профилей одного пользователя в другую учётную запись редко воспроизводит тот же список. Файл объясняет, откуда взялось заблудившееся собственное подключение. О хранилище клиента поставщика он не говорит ничего.
Что записать перед удалением профиля
Дешёвая страховка — заметка из пяти полей: имя, область, адрес сервера, состояние и точный текст ошибки из попытки пользователя. Добавьте клиент, который они на самом деле запускают, потому что эта деталь решает, имеет ли собственная запись вообще значение. Без неё даже правильное удаление выглядит причиной следующей неудачи. Держите заметку в заявке, а не в окне чата.
Удаление — одна команда, и она стирает конфигурацию, а не отключает её. Запускайте её только после того, как эта заметка существует:
Remove-VpnConnection -Name "Office" -Force
Добавьте -AllUserConnection, когда цель находится в хранилище для всех пользователей, и сначала сохраните утверждённый источник конфигурации в другом месте. Затем один раз подключитесь заново и прочитайте таблицу маршрутизации, потому что список доказывает лишь то, что конфигурация сохранена. Достигает ли трафик сервера — отдельный вопрос, на который никакое количество вывода Get-VpnConnection не ответит. Если пользователь терпит неудачу и после чистого повторного добавления, профиль никогда не был проблемой.