web-dev-qa-db-ja.com

PowerShell、Webリクエスト、およびプロキシ

シンプルな web request を作成するときに、PowerShell環境にInternet Explorerのプロキシ設定のみを使用するように指示する方法はありますか?

私のプロキシ設定はネットワークポリシー(またはスクリプト)によって制御されており、後で必要な場合にpsスクリプトを変更する必要はありません。

UPDATE:参加者からのすばらしい情報。これに使用する最終的なスクリプトテンプレートは、次のようになります。

$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
34
BuddyJoe

未テスト

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

...

13
Mitch Wheat

自動検出されたプロキシも同様に処理する次の方法がいくらか優れています。

$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
}
22
Paul Moore
$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080")
$proxy.useDefaultCredentials = $true
$wc = new-object system.net.webclient
$wc.proxy = $proxy
$wc.downloadString($url)
9
Shay Levy

これは元の質問よりもはるかに遅いですが、それ以降のバージョンのPowerShellに関連する回答です。 v3以降、これに対処できる2つのアイテムがあります。

Invoke-WebRequest-ほぼすべてのシナリオでsystem.net.webclientを使用する代わりになります

$ PSDefaultParameterValues-パラメーターの詳細を保存できます

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

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

次のように、これらのパラメーターに対する回答を$ PSDefaultParameterValuesに保存します。$PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80')$PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

' http://###.###.###.###:8 'を$ proxyAddrで置き換えることができます。これをどのスコープに保存するかは、あなたの選択です。それらを$ profileに入れたので、スクリプトでこれらの項目を再度設定する必要はありません。

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

7
Bewc