Обход прокси-сервера для всех веб-запросов в Powershell Core

У меня есть рабочий компьютер под управлением Windows в корпоративной среде с прокси-сервером аутентификации для исходящих подключений к Интернету. Я не знаю, как это настроено, но многие инструменты не могут подключиться, в основном такие, как npm (пакеты в редакторе Atom), NuGet, PowerShellGet и т. д. Мне даже пришлось настроить свой браузер (Vivaldi) на использование прямого подключения. , потому что я не мог, например, войти на некоторые сайты, хотя в MS Edge это работало.

Ошибка HTTP обычно(407) Proxy Authentication Required.

Общесистемный прокси-сервер в Windows настраивается каким-то периодически выполняемым скриптом и я ничего с этим поделать не могу.

Решение, а точнее обходной путь — индивидуально настроить все приложения, у которых есть проблемы с подключением, на обход прокси (использовать прямое подключение к интернету). Мне удалось сделать это почти со всем, что мне было нужно, но с Powershell Core мне пока не удалось.

Кстати, я не уверен, какой смысл в этом прокси, если его можно просто обойти, он просто усложняет регулярную работу на этом компьютере и тратит мое время и деньги компании.

На данный момент я выяснил следующее.

PowerShellGet'sFind-Moduleвыходит из строя с ошибкой:

Невозможно разрешить источник пакета «https://www.powershellgallery.com/api/v2».

Простой веб-запрос завершается с ошибкой « Доступ к кэшу запрещен »:

      Invoke-WebRequest https://google.com

Но это удается, когда он вынужден обойти прокси:

      Invoke-WebRequest https://google.com -NoProxy

netsh winhttp show proxyговорит « Прямой доступ (без прокси-сервера). », но следующая команда возвращает фактический прокси:

      ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy("https://google.com")

Кроме того, следующая команда возвращаетfalse:

      ([System.Net.WebRequest]::GetSystemWebproxy()).IsBypassed("https://google.com")

Я провел довольно обширное исследование и обнаружил, что можно настроитьWebRequestиспользовать прямое соединение, установив для прокси-сервера по умолчанию значение null, но это не помогло:

      [System.Net.WebRequest]::DefaultWebProxy = $null

Я был бы признателен, если бы у кого-нибудь были какие-либо другие идеи.

Обновлять

Я обнаружил, что действительно могу использовать свою учетную запись домена для аутентификации на прокси-сервере:

      Invoke-WebRequest https://google.com -ProxyUseDefaultCredentials -Proxy http://proxy

Так что это будет альтернативой конфигурации обхода прокси. Я просто не знаю, как установить учетные данные для всех запросов Powershell. Я не понимаю, почему системный прокси-сервер Windows не настроен на использование моей учетной записи для аутентификации.

Я попытался настроитьWebRequest::DefaultWebProxyиспользовать прокси-сервер и аутентифицироваться на нем, используя учетные данные моей учетной записи домена, но это не сработало:

      [System.Net.WebRequest]::DefaultWebProxy 
    = New-Object System.Net.WebProxy('http://proxy')
[System.Net.WebRequest]::DefaultWebProxy.Credentials
    = [System.Net.CredentialCache]::DefaultNetworkCredentials

1 ответ

Основываясь на превосходном ответе и исследовании Дэвида Ференци Рогожана, мне удалось заставить его работать, но в моем случае мне пришлось это сделать (обратите внимание на небольшую разницу с приведенным выше):

      [System.Net.HttpWebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy($null)
Другие вопросы по тегам