Pregunta PowerShell, solicitudes web y proxies


Al hacer un simple solicitud web ¿Hay alguna forma de decirle al entorno de PowerShell que solo use la configuración de proxy de Internet Explorer?

Mi configuración proxy está controlada por una política de red (o script) y no quiero tener que modificar scripts ps más adelante si no es necesario.

ACTUALIZAR: Gran información de los participantes. La plantilla de script final que usaré para esto se verá de la siguiente manera:

$proxyAddr = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
$proxy = new-object System.Net.WebProxy
$proxy.Address = $proxyAddr
$proxy.useDefaultCredentials = $true

$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$str = [System.Text.Encoding]::ASCII.GetString($webpage)
Write-Host $str

32
2018-02-20 22:08


origen


Respuestas:


No probado:

$user = $env:username
$webproxy = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet
Settings').ProxyServer
$pwd = Read-Host "Password?" -assecurestring

$proxy = new-object System.Net.WebProxy
$proxy.Address = $webproxy
$account = new-object System.Net.NetworkCredential($user,[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)), "")
$proxy.credentials = $account

$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$string = [System.Text.Encoding]::ASCII.GetString($webpage)

...


12
2018-02-20 22:37



Algo mejor es lo siguiente, que maneja proxies autodetectados también:

$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)

(editar) Además de lo anterior, esta definición parece funcionar bien para mí también:

function Get-Webclient {
    $wc = New-Object Net.WebClient
    $wc.UseDefaultCredentials = $true
    $wc.Proxy.Credentials = $wc.Credentials
    $wc
}

18
2018-02-14 14:52



$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080")
$proxy.useDefaultCredentials = $true
$wc = new-object system.net.webclient
$wc.proxy = $proxy
$wc.downloadString($url)

7
2018-02-21 17:20



Esto es mucho más tarde que la pregunta original, pero sigue siendo una respuesta relevante para las versiones posteriores de PowerShell. Comenzando en v3, tenemos dos elementos que pueden abordar esto:

Invoke-WebRequest - que reemplaza el uso de system.net.webclient para casi todos los escenarios

$ PSDefaultParameterValues - que puede almacenar detalles para los parámetros

¿Cómo usarlos juntos para resolver el problema original de las configuraciones proxy controladas por una política de red (o script) y no tener que modificar los scripts ps más adelante?

Invoke-WebRequest viene con los parámetros -Proxy y -ProxyUseDefaultCredentials.

Almacenamos nuestras respuestas a estos parámetros en $ PSDefaultParameterValues, así: $PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80') $PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

Puedes reemplazar 'http: //###.###.###.###: 80'con $ proxyAddr como lo harás. En qué ámbito eliges almacenar esto, es tu elección. Los puse en mi perfil $, así que nunca más tengo que volver a establecer estos elementos en mis scripts.

¡Espero que esto ayude a alguien!


6
2018-05-08 15:54



Simplemente actualice la URL con su propia dirección proxy: puerto. Permite a PowerShellGet ir más allá del proxy usando sus credenciales locales. Si no tiene requisitos de credenciales, simplemente haga clic en Aceptar cuando se le solicite su contraseña. Cambié el nombre de esa casilla a "Cerrar esta ventana". También puede usar otros gestores de paquetes como Chocolatey / Nuget a través del proxy debido a este script.


-1
2017-07-18 06:37