2013-03-26 11 views
5

Sotto PowerShell 2.0 So che è possibile impostare il proxy che si desidera utilizzare senza conoscere le impostazioni esatte del proxy facendo qualcosa di simile al seguente:Invoke-WebRequest GetSystemWebProxy()

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

Ora, la mia domanda è se non conosco le impostazioni del proxy posso usare quanto sopra e combinarlo con un PowerShell 3.0 Invoke-WebRequest. Ecco quello che speravo di essere in grado di fare:

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

$WS.Proxy = $proxy 

$login = Invoke-WebRequest https://website.com/login_form.html -SessionVariable WS 

Tuttavia, quando tento di fare questo ottengo un errore, (a quanto pare dalla mia proxy aziendale) che indica che le mie credenziali non possono essere verificate. Spero che questo alla fine funzioni, ma forse sto solo facendo un semplice errore.

risposta

10

Forse questo può aiutare, lo tengo nel mio profilo. Sta usando la nuova variabile di preferenza $PSDefaultParameterValues per impostare i valori proxy predefiniti per i nuovi cmdlet Web. Il codice rileva se sono nell'ambiente del mio ufficio e imposto le impostazioni di conseguenza. Questo mi risparmia specificando le impostazioni ogni volta che uso questi comandi.

if(Test-Connection myCorpProxy -Count 1 -Quiet) 
{ 
    $global:PSDefaultParameterValues = @{ 
     'Invoke-RestMethod:Proxy'='http://myCorpProxy:8080' 
     'Invoke-WebRequest:Proxy'='http://myCorpProxy:8080' 
     '*:ProxyUseDefaultCredentials'=$true 
    } 
} 
+0

che ha funzionato. Grazie! – Chris

+0

Che funziona bene. Grazie @Shay Levy –

0

Il problema reale al vostro codice di cui sopra (anche se Shay è più elegante) è che si sta cercando di impostare una proprietà su una variabile prima che esista. La SessionVariable "$ WS" non esiste prima di chiamare Invoke-WebRequest ma si sta tentando di impostare la proprietà .Proxy sopra di essa.

Se ha funzionato a un certo punto, probabilmente hai già creato un'istanza di $ WS in precedenza e quindi sei stato in grado di lavorare con l'oggetto durante il test, ma su una sessione fresca/asciutta quando lo script era in elaborazione dall'alto in basso, non ha funzionato esiste ancora

2

Usare possibile utilizzare questo codice:

$dest = "http://www.google.fr" 
$proxyurl = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($dest) 
Invoke-WebRequest $dest -Proxy $proxyurl -ProxyUseDefaultCredentials