こんにちは。
認証proxyを用いる環境下で、下記向けの各種設定を行う PowerShell 用実行スクリプトを作りました1。
- System.Net.WebClient 向けの DefaultWebProxy (Invoke-WebRequest コマンドなどが利用)
- 環境変数 $env:http_proxy(wget.exe コマンドなどが利用)
- Chocolatey の動作で用いる環境変数
これを使って今回 Chocolatey をインストールし2、さらに応用例として 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 を管理者権限で実行3)。
PS> .\Set-Proxy
PS> .\Install-Chocolatey
PS> choco list -lo
Chocolatey v0.10.3
# Encoding::Shift-JIS
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) のインストーラを動かしています4。
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
を指定しても良いです5。下記は 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 設定6の方が優先される作りになっています。例えば、
-
winget
コマンド
-
なお前もって、PowerShell コマンドライン(管理者権限)上で ExecutionPolicy を設定し、スクリプトを実行可能とする必要があります:
PS> Set-ExecutionPolicy RemoteSigned
↩ -
今回の方法は、前回の「System.Net.WebClient の認証proxy経由対応(環境変数設定)」とは方法を変えました。また、参考:「認証Proxy経由でのChocolateyの利用。 ↩
-
Windows PowerShell の管理者権限での起動方法は、Windows ボタン(タスクバーの左端)をマウスで右クリックし、起動用メニューから選択し起動する方法がなどがあるようですが、実際に動く方法を見つける必要があるようです(「PowerShell を管理者権限で起動する方法」)。 ↩
-
参考:「各種コマンド(wget など)およびアプリケーションソフトを、Chocolatey を利用しインストール(PowerShell)」 ↩
-
参考: 「proxy環境下で、Powershellからwgetする」 。 ↩
-
これは、いわゆる IE インターネットオプション設定とも呼ばれている設定です。参考:「Windows10のプロキシ(Proxy)設定を完全削除する為の設定箇所一覧」 ↩