Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

認証proxyを用いる環境設定(Windows PowerShell)

認証proxyを用いる環境下で、下記向けの各種設定を行う PowerShell 用実行ファイルを作りました。

  • System.Net.WebClient 向けの DefaultWebProxy (Invoke-WebRequest コマンドなどが利用)
  • 環境変数 $env:http_proxy(wget コマンドなどが利用)
  • Chocolatey (0.9.9 以降)の動作で用いる環境変数

これを使って Chocolatey をインストールし1、また応用例として Tex Live のインストールにも使いました。

内部の "<USERNAME>", "<PASSWORD>", "<HOSTNAME>:<PORTNUMBER>" は書き換えてください。

PS> .\Set-Proxy
# Encoding::Shift-JIS
$user = "<USERNAME>"
$password = "<PASSWORD>"
$proxyhost = "<HOSTNAME>:<PORTNUMBER>"
$proxyaddress = "http://$($proxyhost)/"
$proxyaddress_with_authenticattion = "http://$($user):$($password)@$($proxyhost)"
$env:http_proxy = $proxyaddress_with_authenticattion
$env:https_proxy = $proxyaddress_with_authenticattion
$env:ftp_proxy = $proxyaddress_with_authenticattion
$password_secure = ConvertTo-SecureString $password -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential $user, $password_secure
$proxy = New-Object System.Net.WebProxy $proxyaddress
$proxy.Credentials = $creds
[System.Net.WebRequest]::DefaultWebProxy = $proxy

なおこのSet-Proxy.ps1の内容を $profile ファイル内へ書き込めば、PowerShell 起動時に自動実行されます。

PS> if (-Not(test-path $profile)) {New-Item -Path $profile -ItemType "file" -Force}
PS> Get-Content Set-Proxy.ps1 | Add-Content $profile -Encoding Default

Chocolatey インストール

下記の使用例では、Chocolatey を認証proxyを通してインストールしています(PowerShell を管理者権限で実行2)。

PS> Set-ExecutionPolicy RemoteSigned
PS> .\Set-Proxy
PS> .\Install-Chocolatey
PS> choco list -lo
Chocolatey v0.10.3
# Encoding::Shift-JIS
$env:chocolateyProxyUser = $user
$env:chocolateyProxyPassword = $password
$env:chocolateyProxyLocation = $proxyaddress
set ChocolateyInstall=C:\ProgramData\chocolatey
Invoke-Expression ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
choco config set proxyUser $user
choco config set proxyPassword $password
choco config set proxy $proxyhost

そしてインストールされた Chocolatey を使って、wget (認証proxyに対応), unzip をインストールしてみました。

PS> choco install -y wget unzip
PS> choco upgrade -y all
wget コマンド等の確認

インストールした wget, unzip コマンドを確認してみると、

PS> get-command wget, unzip
CommandType     Name          Definition
-----------     ----          ----------
Application     wget.exe      C:\ProgramData\chocolatey\bin\wget.exe
Application     unzip.exe     C:\ProgramData\chocolatey\bin\unzip.exe

Tex Live インストール(wget を利用)

下記例では wget と unzip を使って Tex Live (installing over the Internet) のインストーラを動かしています3

PS> wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl.zip
PS> unzip install-tl.zip
PS> .\install-tl-20170618\install-tl-windows.bat -no-gui --no-persistent-downloads
PS> tlmgr update --self --all --no-persistent-downloads

Invoke-WebRequest, Install-Module などを動かす

Invoke-WebRequest や Install-Module なども、System.Net.WebClient 準拠です。したがって事前に .\Set-Proxy を動かせば良いです。

明示的に -Proxy で指定

もしくは下記のように明示的に引数で -Proxy $proxyaddress -proxyCredential $creds を指定しても良いです4。下記は NuGet, PowerShellGet をインストールする使用例です。

PS> Invoke-WebRequest -Uri 対象url -OutFile 保存先パス -Proxy $proxyaddress -proxyCredential $creds
PS> Install-PackageProvider -Name NuGet -Proxy $proxyaddress -proxyCredential $creds
PS> Install-Module Name PowerShellGet  -Proxy $proxyaddress -proxyCredential $creds
PS> Find-Package -Name ... -Proxy $proxyaddress -proxyCredential $creds

システム設定(WinInet)による proxy 設定

コマンドによっては、システム(WinInet) の proxy 設定5の方が優先される作りになっています。例えば、

  • winget コマンド

  1. 今回の方法は、前回の「System.Net.WebClient の認証proxy経由対応(環境変数設定)」とは方法を変えてみました。また、参考:「認証Proxy経由でのChocolateyの利用。 

  2. Windows PowerShell の管理者権限での起動方法は、Windows ボタン(タスクバーの左端)をマウスで右クリックし、起動用メニューから選択し起動する方法がなどがあるようですが、実際に動く方法を見つける必要があるようです(「PowerShell を管理者権限で起動する方法」)。 

  3. 参考:「各種コマンド(wget など)およびアプリケーションソフトを、Chocolatey を利用しインストール(PowerShell)」 

  4. 参考: 「proxy環境下で、Powershellからwgetする」 。 

  5. これは、いわゆる IE インターネットオプション設定とも呼ばれている設定です。参考:「Windows10のプロキシ(Proxy)設定を完全削除する為の設定箇所一覧」 

Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away


No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
Help us understand the problem. What is going on with this article?