2013-03-26 75 views
5

在PowerShell 2.0中我知道,你可以設置你想通過做類似下面的不知道確切的代理設置使用代理:調用-的WebRequest GetSystemWebProxy()

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

現在,我的問題是,如果我不知道代理設置,我可以使用上述內容並將其與PowerShell 3.0 Invoke-WebRequest結合使用。這裏就是我希望能夠做到:

$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 

然而,當我試圖做到這一點我得到一個錯誤,(顯然是從我公司代理),這表明我的證書無法驗證。我希望這會最終奏效,但也許我只是犯了一個簡單的錯誤。

回答

10

也許這可以幫助,我把它保存在我的個人資料。它使用新的$PSDefaultParameterValues首選項變量來設置新Web cmdlet的默認代理值。該代碼檢測我是否在我的辦公室環境中並相應地設置設置。這節省了我每次使用這些命令時指定的設置。

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

這工作。謝謝! – Chris 2013-03-26 21:46:05

+0

這很好。謝謝@Shay Levy – 2017-05-22 13:00:38

0

的實際問題與您的代碼上面的(儘管吉文的更優雅)是你想存在之前,設置一個變量的屬性。調用Invoke-WebRequest之前,SessionVariable「$ WS」不存在,但您試圖將.Proxy屬性設置爲高於它。

如果它在某一時刻起作用,那麼您之前可能已經創建了一個$ WS的實例,因此可以在測試過程中使用該對象,但在腳本自上而下處理時進行全新/空運行,還沒有存在。

2

使用可以使用此代碼:

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