Windowsで自動化を考えるとき、
やっぱりPowershellが圧倒的に安定みたい。
Powershellでなんでもできる
Powershellで認証
で、Powershellで認証を扱うときには
クレデンシャルオブジェクトを作って使いますね。
ユーザー名とパスワードを含むオブジェクトです。
$password = ConvertTo-SecureString "Password" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password
クレデンシャルの引数として渡すパスワードは、SecureStringオブジェクトです。
で自動化するときには、configファイルなどからパスワードを読み込んでSecureStringにするわけですが、平文でパスワードを保存するのはセキュアじゃない。
ということで、暗号化したパスワードを保存しておく方法があります。
SecureString → 暗号化パスワードテキスト
# keyを明示的に指定しない場合
# コマンドを実行するユーザーと紐づく = 同じユーザーのみ復号化可能
$encrypted = ConvertFrom-SecureString -SecureString $password
# keyを明示的にしてする場合 (任意の配列)
# 復号化するときに同じkeyを指定する
$encrypted = ConvertFrom-SecureString -SecureString $password -key (1..10)
暗号化平文パスワード → SecureString
# keyを明示的に指定しない場合
# 暗号化したときと同じユーザーのみ復号化可能
$password = ConvertTo-SecureString $encrypted
# keyを明示的に指定する場合
$password = ConvertTo-SecureString $encrypted -key (1..10)
SecureString → 平文パスワード
これはひと手間
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($importSecureString)
$StringPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
参考
GitHub - senkousya/usingEncryptedStandardStringOnPowershell: 🔰Windows PowerShellで文字列の暗号化と復号化