Pergunta

Ao fazer uma simples pedido há uma maneira de dizer o ambiente PowerShell usar apenas configurações de proxy de sua Internet Explorer?

As minhas configurações de proxy são controlados por uma política de rede (ou script) e eu não quero ter que modificar scripts de ps, mais tarde, se eu não preciso.

UPDATE: Grande informação dos participantes. O modelo de script final que eu vou usar para isso será algo parecido com o seguinte:

$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
Foi útil?

Solução

Untested :

$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)

...

Outras dicas

Um pouco melhor é o seguinte, que lida com proxies detectados automaticamente assim:

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

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

(edit) Além dos acima, aparece esta definição para funcionar bem para mim também:

function Get-Webclient {
    $wc = New-Object Net.WebClient
    $wc.UseDefaultCredentials = $true
    $wc.Proxy.Credentials = $wc.Credentials
    $wc
}
$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080")
$proxy.useDefaultCredentials = $true
$wc = new-object system.net.webclient
$wc.proxy = $proxy
$wc.downloadString($url)

Este é muito mais tarde do que a pergunta original, mas ainda uma resposta relevante para versões posteriores do PowerShell. A partir de v3, temos dois itens que podem resolver esta:

Invoke-WebRequest - que substitui usando System.Net.WebClient por quase todos os cenários

$ PSDefaultParameterValues ?? - que pode armazenar dados para os parâmetros

Como usá-los em conjunto para resolver o problema original de configurações de proxy controladas por uma política de rede (ou script) e não ter que modificar roteiros ps mais tarde?

Invoke-WebRequest vem com parâmetros -proxy e -ProxyUseDefaultCredentials.

Nós armazenamos nossas respostas a esses parâmetros em $ PSDefaultParameterValues, assim: $PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80') $PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

Você pode substituir ' http: //###.###.### . ###: 80 ' com $ PROXYADDR como você vai. Que possibilidades que você escolher para armazenar isso em, é a sua escolha. Eu colocá-los em meu $ profile, então eu nunca tem que ajustar esses itens em meus scripts novamente.

Espero que isso ajude alguém!

Apenas atualizar o URL com seu próprio endereço de proxy: port. Ele permite PowerShellGet ir passado o proxy usando suas credenciais locais. Se você não tem a exigência de credencial, basta clicar em OK quando solicitado para sua senha. I renomeado que a caixa para "Fechar esta janela". Você também pode usar outros gestores de pacotes como Chocolatey / Nuget através do proxy devido a este script.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top