Fork me on GitHub

Powershell Proxy経由でファイルをダウンロードする

  • May 29, 2013

categoryプラグインは存在しません。categoryプラグインは存在しません。

概要

WindowsのPowerShellで、Proxy経由でファイルなどをダウンロードする方法です。

環境

  • Windows 7
  • PowerShell 2.0

手順

通常のProxy

  • IEのProxyを設定しておく
  • WebClientを取得
$wc = new-object System.Net.WebClient
  • システムProxyを取得して設定
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc.Proxy = $proxy
  • ファイルをダウンロード
$wc.DownloadFile("http://hoge", "hoge")

認証付きProxy

認証付きの場合はDefaultCredentialsではアクセスできない場合があるので、ステータスコードによって再度リクエストを出します。

  • 通常のProxyと同じように準備
$wc = new-object System.Net.WebClient
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc.Proxy = $proxy
  • 407エラーをcatchして再度リクエスト
try \{
  $wc.DownloadFile("http://hoge", "hoge")
\} catch [System.Net.WebException] \{
  if ($_.Exception -match ".*\(407\).*") \{
    # ダイアログを表示してログイン情報を取得
    $cred = get-credential
    $wc.Proxy.Credentials = $cred.GetNetworkCredential()
    # 再度ダウンロード
    $wc.DownloadFile("http://hoge", "hoge")
  \} else \{
    throw
  \}
\}

WebClientではなくWebRequestを使っている場合、1つのRequestから複数のリクエストは出せないため、再度通信を行うには新しくRequestを生成する必要があります。

commentプラグインは存在しません。