背景
また社内プロキシに苦しめられています。
Windows上でpythonのスクリプトを書こうと必要なライブラリをpip install
しようとしたところ、案の定プロキシに阻まれました。
というわけで今回はPowerShellでネットワークに接続する際のプロキシ認証方法についてです。
環境
Windows10
PSVersion:5.1.19041.3031
プロキシサーバの認証には予め設定されたユーザ名とパスワードが必要。
今回は最後にpythonのライブラリをpip install
するので、python3もインストール済みとします。
Profileのセット前準備
忘れがちですが、まずPowerShellを管理者権限で起動します。
PowerShellのプロキシに関する設定はMicrosoft.PowerShell_profile.ps1
での記述が反映されるようになっています。
パスはWrite-Host $PROFILE
で確認できます。
> Write-Host $PROFILE
C:\Users\hogehoge\ドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
ただし、Write-Host
で出力されるパスは設定ファイルを格納すべきフォルダを示しているだけです。
ですので、この段階では実際にエクスプローラーでアクセスしてみても、ファイルは見つかりません。
PowerShell上でもtest-path
で実際にファイルが実在するか確認することができます。
下記の出力では、profileファイルは存在していないことになります。
> test-path $PROFILE
False
PowerShellのスクリプト実行許可
というわけで、Write-Host
で指定されているディレクトリに実際にprofileファイルを作成しますが、その前にPowerShellにスクリプトファイルの実行を許可する必要があります。
Get-ExecutionPolicy
でポリシーを確認して、下記のように表示されたら、現在PowerShellでのスクリプト実行は禁止されている状態にあります。
> Get-ExecutionPolicy
Restricted
ちなみに、このままprofileファイルを作成しようとすると、下記のようなエラーが出ます。
.\hogehoge.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル DC\hogehoge.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\hogehoge.ps1
+ ~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
スクリプト実行のポリシーは下記コマンドで許可できます。
「実行ポリシーを変更しますか?」と表示されますので、「[Y]はい」を選択してください。
Set-ExecutionPolicy RemoteSigned
profileのセット
Write-Host
で指定されているディレクトリに実際にprofileファイルを作成し、再度test-path
でファイルが実在するかを確認します。
> new-itme -path $profile -itmetype file -force
> test-path $PROFILE
True
Profileにプロキシ設定を記述
作成したprofileファイルをVScodeなりのエディタで開き、プロキシ設定に関する記述を書いていきます。
# profile読み込み確認
Get-Host
# 個別の認証情報
$proxyUser = "<USERNAME>"
$proxyPassword = "<PASSWORD>"
$proxyhost = "<HOSTNAME>:<PORTNUMBER>"
# 環境変数
$proxyAddressWithAuthenticattion = "http://$($proxyUser):$($proxy$password)@$($proxyhost)"
$env:http_proxy = $proxyAddressWithAuthenticattion
$env:https_proxy = $proxyAddressWithAuthenticattion
$env:ftp_proxy = $proxyAddressWithAuthenticattion
# クレデンシャル設定
$passwordSecure = ConvertTo-SecureString $proxyPassword -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential $proxyUser, $passwordSecure
$proxy = New-Object System.Net.WebProxy "http://$($proxyhost)/"
$proxy.Credentials = $creds
[System.Net.WebRequest]::DefaultWebProxy = $proxy
# 個別の認証情報
のプロキシ認証に関係する情報を記載していきます。
作成できましたら、PowerShellを再起動します。管理者権限もお忘れなく。
ここまでで、プロキシ認証作業は完了です。
pip install でプロキシ認証されているか確認
当初の目的であるpythonのライブラリをインストールして、プロキシ認証ができているかを確認します。
> pip install openpyxl
これでインストールができましたら、PowerShellでプロキシ認証できていることを確認できたことになります。
参照