2013-03-26 11 views
5

Pod PowerShell 2.0 Wiem, że można ustawić proxy, który chcesz użyć, nie znając dokładnych ustawień proxy, wykonując coś jak następuje:Invoke-WebRequest GetSystemWebProxy()

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

Teraz moje pytanie brzmi: jeśli nie znam ustawień proxy, mogę użyć powyższych i połączyć je z PowerShell 3.0 Invoke-WebRequest. Oto co ja ufałem, aby móc zrobić:

$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 

Jednak gdy próbuję to zrobić, pojawia się błąd, (podobno z mojego pełnomocnika firmy), co wskazuje, że moje poświadczenia nie może zostać zweryfikowany. Mam nadzieję, że to się ostatecznie uda, ale może po prostu popełniłem prosty błąd.

Odpowiedz

10

Może to pomoże, zachowam go w moim profilu. Używa nowej zmiennej preferencji $PSDefaultParameterValues do ustawienia domyślnych wartości proxy dla nowych poleceń cmdlet. Kod wykrywa, czy jestem w moim środowisku biurowym i odpowiednio ustawiam ustawienia. Dzięki temu zapisuję ustawienia za każdym razem, gdy używam tych poleceń.

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

który pracował. Dzięki! – Chris

+0

To działa dobrze. Dzięki @Shay Levy –

0

Rzeczywisty problem z kodem powyżej (choć Shay jest bardziej elegancki) jest to, że starasz się ustawić właściwość na zmiennej zanim ona istnieje. SessionVariable "$ WS" nie istnieje przed wywołaniem Invoke-WebRequest, ale próbujesz ustawić nad nim właściwość .Proxy.

Jeśli zadziałało w jednym punkcie, prawdopodobnie utworzono wcześniej wystąpienie $ WS, dzięki czemu mogłem pracować z obiektem podczas testowania, ale podczas świeżego/suchego przebiegu, gdy skrypt przetwarzał z góry na dół, to didn jeszcze istnieje.

2

stosowanie może użyć tego kodu:

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