PowerShellで認証を実施する際のパスワードを暗号化する方法

toc目次

はじめに

PowerShellスクリプトで認証を伴う処理を実施する際に、パスワードを暗号化して保持する方法のメモです。

パスワードファイルの作成

以下、ユーザー名「User1」、ファイル名「passwd.dat」でパスワードファイルを作成するサンプルです。(※ユーザー名、ファイル名は環境に合わせて適宜変更してください。)

1
2
3
4
$user = "User1"
$cred = Get-Credential $user
$credFile = Join-Path $PSScriptRoot "passwd.dat"
$cred.Password | ConvertFrom-SecureString | Set-Content $credFile

スクリプトを実行すると資格情報の要求ウインドウが表示されるので、パスワードを入力して「OK」ボタンを押下します。

資格情報の要求

実行後、スクリプトファイルと同じディレクトリに「passwd.dat」が作成されます。

パスワードファイルを使用して資格情報(credential)を取得

以下、作成したパスワードファイル(passwd.dat)から資格情報オブジェクトを取得し、ユーザー名とパスワードを表示するサンプルです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# パスワードファイルからパスワードを取得
$credFile = Join-Path $PSScriptRoot "passwd.dat"
$securePassword = Get-Content $credFile | ConvertTo-SecureString

# 資格情報オブジェクトの取得
$user = "User1"
$credential = New-Object Management.Automation.PSCredential $user, $securePassword

# 資格情報オブジェクトの内容確認
Write-Host $credential.UserName
Write-Host $credential.GetNetworkCredential().Password
> sample.ps1
User1
password

パスワードは資格情報の要求ウインドウで入力したパスワードが表示されます。

注意点

パスワードファイルはOS毎の暗号化キーで暗号化されるため、パスワードファイルを作成したPC以外のPCで復号化することはできません。

このため、開発機でテストして本番機で動作させるという場合は、本番機でパスワードファイルを作成し直す必要があります。

参考