В том случае, если доступ в Интернет в организации осуществляется через прокси сервер, по-умолчанию из сессии 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 (а точнее класс .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).
Импортируем настройки прокси из параметров 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.