Обход прокси-сервера для всех веб-запросов в 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)