PowerShell через прокси

В том случае, если доступ в Интернет в организации осуществляется через прокси сервер, по-умолчанию из сессии PowerShell не получится обратиться к внешней веб-странице (командлет Invoke-WebRequest), обновить справку с помощью Update-Help или загрузить пакет с приложением  из внешнего репозитория пакетов (с помощью PackageManagement или NanoServerPackage). В этой статье мы разберемся как из сессии PowerShell получить доступ в Интернет через прокси сервер с аутентификацией.

Попробуем выполнить обновление справки Powershell:

Update-Help

Или обратиться к внешней веб-странице:

Invoke-WebRequest http://winitpro.ru

При отсутствии прямого выхода в Интернет команда вернет ошибку примерно такого вида:

update-help : Failed to update Help for the module(s) ‘DhcpServer, DirectAccessClientComponents….’  with UI culture(s) {en-US} : Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.
Invoke-WebRequest: Unable to connect to the remote server

powershell через http proxyДело в том, что Powershell (а точнее класс .NET  System.Net.WebClient, который используют данные командлеты для обращения к внешними ресурсам по HTTP) не использует настройки системного прокси, заданных в IE.  Однако в классе WebClient есть свойства, позволяющие указать как настройки прокси (WebClient.Proxy), так и данные для авторизации на нем (WebClient.Credentials или WebClient.UseDefaultCredentials). Рассмотрим, как воспользоваться данными свойствами класса WebClient.

Проверим текущие настройки системного прокси в сессии Powershell

netsh winhttp show proxy

Как вы видите, настройки прокси не заданы

Current WinHTTP proxy settings:
Direct access (no proxy server).

netsh winhttp show proxyИмпортируем настройки прокси из параметров Internet Explorer:

netsh winhttp import proxy source=ie

или зададим их вручную

netsh winhttp set proxy "192.168.0.14:3128"

netsh winhttp set proxy В том случае, если на прокси требуется авторизоваться, при выполнении запросов PoSh будут появляться ошибки «(407) Proxy Authentication Required». Рассмотрим два способа авторизации на прокси-сервере.

В том случае, если вы авторизованы в системе под доменной учетной записью, и ваш прокси поддерживает NTLM/AD аутентификацию, то для аутентификации на прокси сервере можно воспользоваться учетными данными текущего пользователя (вводить имя/пароль не потребуется):

$Wcl = new-object System.Net.WebClient
$Wcl.Headers.Add(“user-agent”, “PowerShell Script”)
$Wcl.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

Если же нужно вручную аутентифицироваться на прокси-сервере, выполните следующие команды, указав имя и пароль пользователя в соответствующем окне.

$Wcl=New-Object System.Net.WebClient
$Creds=Get-Credential
$Wcl.Proxy.Credentials=$Creds

PowerShell авторизация на проксиТеперь можно попробовать обратится к внешнему сайту или обновить справку командой Update-Help.

invoke-webrequest - через проксиВсе получилось!

(Пока оценок нет)
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x