2009-02-20 16 views
31

単純な場合は、Internet Explorerのプロキシ設定を使用するようにPowerShell環境に指示する方法がありますか。web requestPowerShell、Web要求、およびプロキシ

私のプロキシ設定はネットワークポリシー(またはスクリプト)によって制御されているので、あとからpsスクリプトを修正する必要はありません。

更新日: 参加者からの素晴らしい情報。

$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 

答えて

13

未テスト:私はこのために使用します、最終的なスクリプトのテンプレートには、次のようになります

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

を...

8
$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080") 
$proxy.useDefaultCredentials = $true 
$wc = new-object system.net.webclient 
$wc.proxy = $proxy 
$wc.downloadString($url) 
+0

これは私にとっては役に立たないでしょう。 Webページを読む代わりに、資格情報のプロキシプロンプトが表示されます。( – Bluz

+0

$ proxy.credentials($ proxy.useDefaultCredentialsを$ falseに設定)、YMMVを使用して資格情報を設定してみてください。 –

+0

ニースのシェイ、それは賢いですが残念ながら私はまだ同じページを取得しています:(私はちょうどそれをやって、私がテキストファイルに入れたいhtmlをコピーしてそこから取ってコピーする古い方法を使用すると思います。あなたの助けてくれてありがとう – Bluz

17

やや優れています自動検出されたプロキシも同様に扱う次のようになります。

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

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

(編集)上記に加えて、この定義は、あまりにも、私のために正常に動作するように見える:

function Get-Webclient { 
    $wc = New-Object Net.WebClient 
    $wc.UseDefaultCredentials = $true 
    $wc.Proxy.Credentials = $wc.Credentials 
    $wc 
} 
+0

'自動検出された代理人 'と言うと、自動設定スクリプト(Internet Explorerでオプションが呼び出されるので)を意味しますか? – Chris

+0

私はそう思います。私はそれを書いた:-)) –

+0

これはPS 2.0で動作するようには見えないことに注意してください。 NTLMがWebClientによって古い.netバージョンでどのように処理されるのかというバグがあると思います。そう...これを行うためのPSの最新バージョンがあることを確認してください。 – Nacht

7

これはずっと後に元の質問よりも、まだPowerShellのそれ以降のバージョンに関連する答え。パラメータの詳細を保存することができます - - ほぼすべてのシナリオに

$ PSDefaultParameterValuesをsystem.net.webclientを使用して置き換える

を呼び出し、WebRequestクラス:V3以降、私たちはこの問題に対処することができます二つのアイテムを持っています

ネットワークポリシー(またはスクリプト)によって制御されるプロキシ設定の元の問題を解決するためにこれらを一緒に使用する方法と、後でpsスクリプトを変更する必要はありませんか?

Invoke-WebRequestには、-Proxyおよび-ProxyUseDefaultCredentialsパラメータが付属しています。

我々はそうのように、$ PSDefaultParameterValuesで、これらのパラメータに私たちの答えを保存する:あなたは意志として $PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80') $PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

あなたは$ PROXYADDRで 'http://###.###.###.###:80' を置き換えることができます。あなたがこれを保存するために選択した範囲はあなたの選択です。私はそれらを$ profileに入れていますので、スクリプトにこれらの項目を設定する必要はありません。

これが誰かを助けることを願っています!

0

URLを独自のプロキシアドレス:portで更新するだけです。 PowerShellGetは、ローカルの資格情報を使用してプロキシを通過できます。資格要件がない場合は、パスワードの入力を求めるメッセージが表示されたら[OK]をクリックします。そのボックスの名前を「このウィンドウを閉じる」に変更しました。このスクリプトのために、Chocolatey/Nugetのような他のパッケージマネージャをプロキシ経由で使うこともできます。