Domanda

Quando si effettua un semplice richiesta web c'è un modo per raccontare l'ambiente PowerShell usare solo Internet Explorer impostazioni del proxy?

Il mio proxy impostazioni sono regolate da criteri di rete(o script) e io non voglio avere a modificare script ps in seguito, se non devo.

AGGIORNAMENTO: Grande informazioni da parte dei partecipanti.Il finale modello di script che userò per questo avrà un aspetto simile al seguente:

$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
È stato utile?

Soluzione

testato :

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

...

Altri suggerimenti

Un po 'meglio è il seguente, che gestisce i proxy rilevate automaticamente così:

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

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

(Modifica) A seguito di quanto sopra, questa definizione sembra funzionare bene anche per me:

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)

Questo è di molto successiva alla domanda originale, ma ancora una risposta per le versioni successive di PowerShell.A partire v3, ci sono due elementi che possono risolvere questo:

Invoke-WebRequest - che sostituisce l'utilizzo di sistema.net.webclient per quasi ogni scenario

$PSDefaultParameterValues - in grado di memorizzare i dettagli per i parametri

Come usarli insieme per risolvere il problema di impostazioni del proxy controllato da una rete politica(o script) e di non dover modificare script ps più tardi?

Invoke-WebRequest viene fornito con Proxy e -ProxyUseDefaultCredentials parametri.

Archiviamo le nostre risposte a questi parametri in $PSDefaultParameterValues, in questo modo:$PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80') $PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

È possibile sostituire 'http://###.###.###.###:80'con $proxyAddr, come si vedrà.L'ambito per il quale si sceglie di memorizzare questo, è una tua scelta.Li ho messi nel mio $profile, quindi non ho mai necessario impostare questi elementi in mio script di nuovo.

Spero che questo aiuta qualcuno!

Basta aggiornare l'URL con il proprio indirizzo proxy: port. Esso consente PowerShellGet di dribblare il proxy utilizzando le credenziali locali. Se non avete requisito credenziali, è sufficiente fare clic su OK quando viene richiesta la password. Ho rinominato quella scatola a "Chiudi questa finestra". È inoltre possibile utilizzare altri gestori di pacchetti come Chocolatey / Nuget attraverso il proxy a causa di questo script.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top