対話ログインを無くしたい
Windows Powershell で色んなサービスにログインする時に、Credential を使う時ってありますよね
デフォルトだと Credential が要求されると、ユーザ・パスワードを入力するダイアログが出てきてしまいます
人がオペレーションする時はこれで良いのですが、バッチ処理など自動化しようとするとこれでは困ります
今更かもですが、最近出番が多いので備忘録として残します
前提条件
この記事で使える環境は Windows Powershell 5.1 のみのようです(若干古い)
事前準備
Credential で要求されるユーザ・パスワードを使ってパスワードファイルを作成します
ポイントとしては、ConvertFrom-SecureString のパラメータである -SecureKey を敢えて指定しないようにしています
この場合、暗号化キーは各WindowsOS 毎のキーを使用するため、パスワードファイルが漏洩しても別のマシンでは複合は困難になります
という訳で、以下コマンドは自動ログインを行う端末で実行する必要があります
$tmpCredential = Get-Credential
$tmpCredential.Password | ConvertFrom-SecureString | Set-Content "pwd.dat"
Credentialの取得
以下の様にすることで Credential を取得できます
これを Credential を使ってログインするコマンドに渡すことで、対話ログインすることなくログインできます
$loginUser = "ログインに使用するユーザ名"
$passwordFile = "pwd.dat"
$password = Get-Content $passwordFile | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PSCredential $loginUser, $password
ログインの例
例えば、 Azure にログインするには以下の様にします
Connect-AzAccount -Credential $credential
コメント