PowerShell: Как указать PowerShell использовать прокси-сервер для web запросов?

03 май 2025, Суббота
21
0
0 0
При реализации задач по автоматизации, бывает необходимо предварительно выполнять запросы в сеть Интернет. При этом, если с машины не разрешен выход в сеть Интернет, а настройки прокси-сервера для пользователя из-под которого выполняется скрипт не прописаны, то выполнение запросов в Интернет будет завершаться ошибкой: Unable to connect to the remote server.
Для выхода из этой ситуации, в  PowerShell можно настроить использование прокси-сервера для веб-запросов несколькими способами, в зависимости от контекста:

1. Для модуля Invoke-WebRequest / Invoke-RestMethod

Эти cmdlets используют системные настройки прокси по умолчанию, но можно явно указать прокси:
$proxy = "http://proxy.example.com:8080"
$proxyCred = Get-Credential  # Если требуется аутентификация
Invoke-WebRequest -Uri "https://example.com" -Proxy $proxy -ProxyCredential $proxyCred

2. Для всех веб-запросов через [System.Net.WebRequest] (например, в .NET-скриптах)

[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy("http://proxy.example.com:8080", $true)
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
или с явными учетными данными:
$proxyCred = New-Object System.Net.NetworkCredential("username", "password", "domain")
[System.Net.WebRequest]::DefaultWebProxy.Credentials = $proxyCred

3. Через переменные окружения

PowerShell (и многие другие программы) учитывают переменные HTTP_PROXY и HTTPS_PROXY: 
$env:HTTP_PROXY = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"
Если прокси требует аутентификации:
$env:HTTP_PROXY = "http://username:password@proxy.example.com:8080"

4. Для Package Manager (NuGet, PowerShellGet)

Если нужно настроить прокси для Install-Package или Install-Module:
[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy("http://proxy.example.com:8080")
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
Или через nuget.config:
<configuration>
  <config>
    <add key="http_proxy" value="http://proxy.example.com:8080" />
    <add key="http_proxy.user" value="username" />
    <add key="http_proxy.password" value="password" />
  </config>
</configuration>

Проверить текущие настройки прокси:
[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://example.com")

Если нужно отключить прокси в PowerShell:

[System.Net.WebRequest]::DefaultWebProxy = $null
$env:HTTP_PROXY = $null
$env:HTTPS_PROXY = $null
Комментарии:
Прокомментировать
При использовании материалов ссылка на сайт UserMan.ru обязательна.
Политика конфиденциальности
Пользовательское соглашение
UserMan.ru © 2017-2025
Соцсети: VK