1000+ инструкций в блоге SoftComputers

Когда компьютер находится за прокси-сервером, доступ к внешним ресурсам из PowerShell может быть ограничен. Это затрагивает такие операции, как загрузка веб-страниц через Invoke-WebRequest, обновление справки (Update-Help), установка модулей из PSGallery, подключение к Azure или Microsoft 365, а также загрузка пакетов через winget или PackageManagement. В этой статье мы разберём, как настроить PowerShell для работы через прокси-сервер с аутентификацией, используя команды, профили и переменные окружения.

Приобрести оригинальные ключи активации Windows 11 можно у нас в каталоге от 1690

Проблемы доступа через прокси в PowerShell

При попытке выполнить команды, требующие доступа в интернет, без настроенного прокси, вы получите ошибки. Например:

— Обновление справки:

Update-Help

Ошибка: Failed to update Help… Unable to connect to Help content.

— Доступ к веб-странице:

Invoke-WebRequest https://softcomputers.market

Ошибка: Unable to connect to the remote server.

— Поиск модуля в PSGallery:

Find-Module modulename

Ошибка: Unable to resolve package source ‘https://www.powershellgallery.com/api/v2’.

Причина в том, что PowerShell (использующий класс System.Net.WebClient в Windows PowerShell 5.1 или System.Net.HttpClient в PowerShell Core 7.x) не применяет системные настройки прокси, заданные в настройках Windows.

Настройка прокси-сервера в PowerShell

Проверка текущих настроек прокси

1. Проверка системных настроек прокси
Выведите текущие параметры WinHTTP:

netsh winhttp show proxy

Если прокси не настроен, вывод будет: Direct access (no proxy server).

2. Импорт настроек из Internet Explorer
Импортируйте настройки прокси из браузера:

netsh winhttp import proxy source=ie

3. Ручная настройка прокси
Задайте адрес и порт прокси-сервера вручную:

netsh winhttp set proxy "192.168.0.14:3128"

4. Настройка списка исключений
Укажите адреса, для которых прокси не используется:

netsh winhttp set proxy "192.168.0.14:3128" bypass-list="10.*,172.*,192.168.*,*.corp.softcomputers.org"

5. Проверка обхода прокси
Убедитесь, использует ли PowerShell прокси для конкретного URL:

([System.Net.WebRequest]::GetSystemWebproxy()).IsBypassed("https://softcomputers.market")

Результат $False означает, что подключение идёт через прокси.

Аутентификация на прокси-сервере

Если прокси требует аутентификацию, без неё возникнет ошибка (407) Proxy Authentication Required. Рассмотрим два подхода: использование текущих учётных данных и ручной ввод.

1. Аутентификация с текущими учётными данными
Для доменной сети с поддержкой Kerberos или NTLM используйте учётные данные текущего пользователя:

$Wcl = New-Object System.Net.WebClient

$Wcl.Headers.Add("user-agent", "PowerShell Script")

$Wcl.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

2. Ручная аутентификация
Запросите учётные данные вручную:

$Wcl = New-Object System.Net.WebClient

$Creds = Get-Credential

$Wcl.Proxy.Credentials = $Creds

После этого команды, такие как Invoke-WebRequest или Update-Help, должны работать корректно.

3. Проверка внешнего IP
Убедитесь, что вы используете прокси, проверив внешний IP:

(Invoke-WebRequest -Uri "http://ifconfig.me/ip").Content

IP должен соответствовать адресу прокси-сервера.

4. Однократное использование прокси
Для разового запроса укажите прокси в командлете:

Invoke-WebRequest https://softcomputers.market -ProxyUseDefaultCredentials -Proxy "http://192.168.0.14:3128"

Или с ручной аутентификацией:

$ProxyCreds = Get-Credential

Invoke-WebRequest https://softcomputers.market -Proxy "http://192.168.0.14:3128" -ProxyCredential $ProxyCreds

Настройка прокси в PowerShell Core (7.x)

В PowerShell Core для веб-запросов используется класс System.Net.HttpClient, что требует немного иных настроек.

1. Задание прокси
Укажите адрес прокси-сервера:

[System.Net.Http.HttpClient]::DefaultProxy = New-Object System.Net.WebProxy('http://192.168.0.14:3128')

2. Аутентификация текущим пользователем
Используйте текущие учётные данные:

[System.Net.Http.HttpClient]::DefaultProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

3. Ручная аутентификация
Запросите учётные данные:

[System.Net.Http.HttpClient]::DefaultProxy.Credentials = Get-Credential

4. Использование переменных окружения
Задайте прокси через переменные окружения:

$proxy = 'http://192.168.0.14:3128'

$ENV:HTTP_PROXY = $proxy

$ENV:HTTPS_PROXY = $proxy

Для аутентификации включите учётные данные в URL:

$proxy = 'http://username:password@192.168.0.14:3128'

Проверьте переменные:

Get-ChildItem Env:

На Linux экспортируйте переменные:

export HTTP_PROXY=http://192.168.0.14:3128

export HTTPS_PROXY=http://192.168.0.14:3128

Автоматизация настроек через профиль PowerShell

Для автоматической настройки прокси при запуске PowerShell создайте профиль:

1. Создание профиля
Откройте файл профиля:

notepad $PROFILE

Или для всех пользователей:

notepad $PROFILE.AllUsersCurrentHost

2. Добавление настроек прокси
Добавьте код, например, для использования PAC-файла и аутентификации:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy('http://192.168.1.90:80')

[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

[System.Net.WebRequest]::DefaultWebProxy.BypassProxyOnLocal = $true

3. Разрешение выполнения скриптов
По умолчанию скрипты запрещены. Разрешите их:

Set-ExecutionPolicy RemoteSigned

4. Проверка профиля
Перезапустите PowerShell. Настройки прокси будут применены автоматически.

Управление настройками прокси через реестр

1. Просмотр настроек прокси
Получите текущие параметры из реестра:

Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select-Object ProxyServer, ProxyEnable

Также можно получить настройки WebProxy таким способом:

[System.Net.WebProxy]::GetDefaultProxy()

2. Включение/отключение прокси
Включите прокси:

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable -Value 1

Отключите прокси:

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable -Value 0

3. Изменение настроек прокси
Используйте функцию для изменения прокси с проверкой доступности:

function Set-Proxy ($server, $port) { If ((Test-NetConnection -ComputerName $server -Port $port).TcpTestSucceeded) { Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyServer -Value "$($server):$($port)" Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyEnable -Value 1 } Else { Write-Error -Message "Неверные настройки прокси-сервера: $($server):$($port)" } }

Set-Proxy 192.168.0.14 3128

4. Добавление исключений
Добавьте адреса в список исключений:

$ProxyExceptionList = ";*.softcomputers.org;*.yandex.ru"

$ProxyProperty = Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

If ($ProxyProperty.ProxyOverride) { $OldValue = $ProxyProperty.ProxyOverride; $NewValue = $OldValue + $ProxyExceptionList; $ProxyProperty | Set-ItemProperty -Name ProxyOverride -Value $NewValue } Else { Write-Warning "Список исключений пуст!" }

5. Сохранение учётных данных
Сохраните имя и пароль для аутентификации:

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyUser -Value "username"

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyPass -Value "password"

Использование TLS 1.2

В старых версиях Windows (Windows 10, Server 2016) используется устаревший TLS 1.0, что может вызывать ошибки при доступе к PSGallery. Включите TLS 1.2:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Рекомендации

— Храните пароли в безопасном формате (например, через Export-Clixml) вместо реестра.

— Проверяйте поддержку Kerberos/NTLM на прокси-сервере для упрощения аутентификации.

— Используйте PAC-файлы для автоматической настройки прокси в корпоративных сетях.

— Настройте профиль PowerShell для автоматизации, но убедитесь, что политика выполнения скриптов (ExecutionPolicy) позволяет запуск.

— Тестируйте настройки с помощью Invoke-WebRequest или Test-NetConnection перед использованием критических команд.

Эти методы позволяют настроить PowerShell для работы через прокси-сервер в Windows PowerShell 5.1 и PowerShell Core 7.x, обеспечивая доступ к внешним ресурсам, таким как PSGallery, Azure и веб-сайты.

banner for Windows
Лицензионный ключ активации Windows от
Подписаться
Уведомить о
guest
     
0 отзывов
22
Межтекстовые Отзывы
Посмотреть все комментарии