В том случае, если доступ в Интернет в организации осуществляется через прокси сервер, по-умолчанию из сессии PowerShell не получится обратиться к внешней веб-странице (командлет Invoke-WebRequest), обновить справку с помощью Update-Help или загрузить пакет с приложением из внешнего репозитория пакетов (с помощью PackageManagement или NanoServerPackage). В этой статье мы разберемся как из сессии PowerShell получить доступ в Интернет через прокси сервер с аутентификацией.
Попробуем выполнить обновление справки Powershell:
Update-Help
Или обратиться к внешней веб-странице:
Invoke-WebRequest http://winitpro.ru
При отсутствии прямого выхода в Интернет команда вернет ошибку примерно такого вида:
Дело в том, что Powershell (а точнее класс .NET System.Net.WebClient, который используют данные командлеты для обращения к внешними ресурсам по HTTP) не использует настройки системного прокси, заданных в IE. Однако в классе WebClient есть свойства, позволяющие указать как настройки прокси (WebClient.Proxy), так и данные для авторизации на нем (WebClient.Credentials или WebClient.UseDefaultCredentials). Рассмотрим, как воспользоваться данными свойствами класса WebClient.
Проверим текущие настройки системного прокси в сессии Powershell
netsh winhttp show proxy
Как вы видите, настройки прокси не заданы
Direct access (no proxy server).
Импортируем настройки прокси из параметров Internet Explorer:
netsh winhttp import proxy source=ie
или зададим их вручную
netsh winhttp set proxy "192.168.0.14:3128"
В том случае, если на прокси требуется авторизоваться, при выполнении запросов 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
Теперь можно попробовать обратится к внешнему сайту или обновить справку командой Update-Help.
Все получилось!