a wandering wolf

Does a wandering wolf dreams of a wondering, sometimes programming sheep?

このエントリーをはてなブックマークに追加

PowerShell で使う認証情報を設定する

自由なインターネットを謳歌出来ない方向けの記事です。具体的には、認証付きプロキシの内側からインターネットの大海原に漕ぎ出さなければならない方(私を含む)用の記事となります。

PowerShell を使う上で、System.Net.WebClient などを使うことはよくあると思います。しかし、プロキシの壁があると、以前書いたこの記事のように、System.Net.WebProxy などを用意する必要があります。

毎回こんなことをやるのは手間ですし、第一 Invoke-Expression などで Web 上のスクリプトをダウンロードして実行しようとすると、スクリプト上の WebClient がプロキシを持ってなくて407が返ってくるというケースもよくあります。

じゃあどうするかというと、あらかじめデフォルトの認証情報を設定しておけば良いのです。

認証情報を設定する

次のような PowerShell スクリプトを書きます:

function Set-CustomCredentials {
    # 平文パスワードをSecureStringに変換
    $password = ConvertTo-SecureString "password" -AsPlainText -Force
    # Credentialを生成
    $cred = New-Object System.Management.Automation.PSCredential "username", $password
    # プロキシ情報を設定
    $proxy = New-Object System.Net.WebProxy "http://example.com:8080/"
    # WebProxyにCredentialを持たせる
    $proxy.Credentials = $cred
    # デフォルトのプロキシに、上で作成したWebProxyを設定
    [System.Net.WebRequest]::DefaultWebProxy = $proxy
}

あとはこの Set-CustomCredentials 関数をロードして実行すれば、WebClient などが上であらかじめ設定しておいたプロキシ情報を使ってくれるようになります。

これを毎回ロードするのも手間なので、PowerShell ProfileとしてPowerShell起動時に自動で読み込ませておきましょう。Profileの作り方は今回の範囲外ですが、以下の記事がオススメです:

PowerShell で Profile を利用して スクリプトの自動読み込みをしてみよう - tech.guitarrapc.cóm

最後に

全ての壁は、超えられるために存在する(ドヤァ