Записывайте исключения WebProxy как регулярные выражения
Постройте корректное выражение исключения для System.Net.WebProxy с экранированными точками и явными границами имени хоста вместо подстановочного знака в стиле оболочки.
Аргумент BypassList класса System.Net.WebProxy содержит регулярные выражения. Шаблон вроде *.office.example недопустим, потому что у ведущей звёздочки нет предшествующего выражения, которое можно повторить.
Для HTTP- и HTTPS-запросов к office.example и его поддоменам конфигурация PowerShell может использовать:
$bypass = @('^https?://([a-z0-9-]+\.)*office\.example(:[0-9]+)?$')
$proxy = [System.Net.WebProxy]::new(
'http://proxy.example:8080',
$false,
[string[]]$bypass
)
Экранированные точки соответствуют буквальным точкам. Повторяющаяся группа метки имени хоста допускает как базовый домен, так и имена под ним. Якоря удерживают имя вроде office.example.other.test за пределами этого правила. Строки PowerShell в одинарных кавычках сохраняют обратные косые черты, которые использует выражение.
Текущая реализация .NET сопоставляет эти выражения со схемой, именем хоста и нестандартным портом назначения. Она не включает путь запроса или строку запроса. Поэтому необязательная группа порта допускает и нестандартные порты; удалите её или сузьте, если политика требует конкретной службы.
В этом примере BypassProxyOnLocal равен false, чтобы политику регулярного выражения можно было проверить отдельно от этой дополнительной настройки исключения. Присоедините полученный объект прокси к HTTP-клиенту, который должен его использовать. Для разрешённой проверки публичного URL вне домена исключения запись HTTP из HTTP proxy list может предоставить свой адрес, без настроенной учётной записи прокси.
Используйте IsBypassed с представительными значениями Uri, чтобы проверить решение о маршрутизации: базовый домен, один поддомен, посторонний внешний хост и вводящий в заблуждение более длинный суффикс. Результат true означает, что выбран прямой доступ; он не доказывает, что прямой адресат достижим.