プロキシの背後にあるウィンドウにチョコレートをインストールしようとしています:
@powershell -ExecutionPolicy unrestricted
Power Shellで実行しています
$wc=new-object net.webclient;
$wc.Proxy=new-object system.net.WebProxy('<myproxy-ip>:8012',$true);
$wc.Proxy.Credentials = new-object system.net.NetworkCredential('<myusername>','<mypass>');
iex ($wc.DownloadString('https://chocolatey.org/install.ps1'));
次のエラーが表示されます
Exception calling "DownloadString" with "1" argument(s): "The remote server returned an error: (407) Proxy Authentication Required."
At line:1 char:1
+ iex ($wc.DownloadString('https://chocolatey.org/install.ps1'));
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException
私は、firefox/iexplorerを起動するときに入力する必要があるのと同じユーザー名/パスワードを使用しています(画像を参照)。常に入力する必要があるため、プロキシに設定されているデフォルトのユーザー名/パスワードはありません。
詳細(プライベートウィンドウのFirefoxでInspect Elementを使用)
応答ヘッダー
Cache-Control: no-cache
Connection: close
Content-Length: 813
Content-Type: text/html; charset=utf-8
Pragma: no-cache
Proxy-Authenticate: BASIC realm="PROXY_INTERNET"
Proxy-Connection: close
Set-Cookie: BCSI-CS-dfaeac52a135c7c0=2; Path=/
https://github.com/chocolatey/chocolatey/wiki/Proxy-Settings-for-Chocolatey を参照してください
PowerShellで関数を定義します
_function Create-Proxy($proxyHost,$proxyPort,$proxyUsername,$proxyPassword){
#$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxyUrl = $proxyHost+":"+$proxyPort;
Write-Host "proxy url [$proxyUrl]";
$proxy = New-Object System.Net.WebProxy($proxyUrl, $true);
$passwd = ConvertTo-SecureString $proxyPassword -AsPlainText -Force; ## Website credentials
$proxy.Credentials = New-Object System.Management.Automation.PSCredential ($proxyUsername, $passwd);
return $proxy;
}
_
のように呼ぶ
_$wc=new-object net.webclient;
$wc.UseDefaultCredentials = $true
$wc.Proxy = Create-Proxy "<proxy-Host>" "<proxy-port>" "<proxy-username>" "<proxy-clear-pass>"
$wc.DownloadString('https://chocolatey.org/install.ps1');
_
私が発見したのは、実際のダウンロードは機能しましたが、カスタム構築されたプロキシを使用していたため、インストーラーの実行は機能しませんでした。
したがって、ダウンロードされた_install.ps1
_内の不正なプロキシ設定が原因で、iex ($wc.DownloadString("https://chocolatey.org/install.ps1"));
は失敗します
テストできない(同様のプロキシが利用できない)ので、これが機能するかどうかは実際にはわかりませんが、次のことを試してみてください。
$wc = new-object net.webclient;
$proxyUri = new-object system.uri("http://<myproxy-ip>:8012");
$wc.Proxy = new-object system.net.WebProxy($proxyUri, $true);
$cachedCredentials = new-object system.net.CredentialCache;
$netCredential = new-object system.net.NetworkCredential("<myusername>", "<mypass>");
$cachedCredentials.Add($proxyUri, "Basic", $netCredential);
$wc.Proxy.Credentials = $cachedCredentials.GetCredential($proxyUri, "Basic");
iex ($wc.DownloadString("https://chocolatey.org/install.ps1"));
目的は、CredentialCacheオブジェクトを使用して、資格情報に「基本」認証モードを強制的に使用させることです。