多忙に胡坐を書いて更新が落ちていましたが、以前のペースにもどせるように再開しようと思います。
さて、パスワードって生埋め込みはいやです。本当にいやです。もうない。じゃぁどうするかというと、Get-Credential
コマンドレットを利用します。
この Get-Credential
に入力したパスワードは、[System.Security.SecureString] として暗号化され再利用可能となります。
そう、PowerShell では、パスワードは [System.Security.SecureString] として扱われます。この [System.Security.SecureString] はMicrosoft も PowerShell でパスワード扱うなら定番はこれ っていってる結構優れた特質を持っています。が、その話はまた今度で。
今回は、この Get-Credential による [System.Security.SecureString] を利用するときの簡単な導入編を。
目次
Get-Credential を使ってみる
まずは使ってみましょう。
PowerShell で、以下をCredentialを入力するための Get-Credentialと、それを $cred 変数に 格納し再利用します。
$cred = Get-Credential -Credential UserName
これで、以下のプロンプトが出たかと思います。((レジストリでプロンプトを出ないようにしていない限りは出るはず))
パスワード欄に入力しようとするとマスクがかかりますね?
入力が完了したら $cred 変数を見てみましょう。
$cred
UserName Password -------- -------- UserName System.Security.SecureString
よさそうですね。では見ていきます。
Get-Credentialで入力した内容を取得する
Get-Member で内容を見てみます。
$cred | Get-Member
TypeName: System.Management.Automation.PSCredential Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetNetworkCredential Method System.Net.NetworkCredential GetNetworkCredential() GetObjectData Method void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context), void ISerializable.GetObjectData(System.Runtime.Serializ... GetType Method type GetType() ToString Method string ToString() Password Property securestring Password {get;} UserName Property string UserName {get;}
UserNameプロパティを見ると入力した UserName が取得できています。
$cred.UserName
UserName
たとえば、UserName を hoge として入力するとこのようになっているはずです。
$cred = Get-Credential -Credential hoge
UserName Password -------- -------- hoge System.Security.SecureString
では、パスワード。これを取得してみましょう。
$cred.Password
System.Security.SecureString
あれ、取れないですね。よかった! PowerShell自体は、Credential を [System.Security.SecureString] として扱うので問題ないです。なので、見えない。当然そうあるべきなんですが、そうとも言ってられない時もあるでしょう。
そんな時に、どう入力したパスワードを取得するか。これが今回の主題です。
Password を取得する
簡単です。GetNetworkCredential()
メソッドを利用するのです。
つまりこう。
$cred.GetNetworkCredential().Password
取得できました。
Password
まとめ
今回のは、簡単なTipsです。が、ご存知なかった人にとっては大きな意識変化になると思います。
Get-Credential から取得できる時でも、SecureStringとして出して、MarshelRef 参照して SecureString から紐解いていた方もいたかと思いますので。
生パスワードを取得とかしたくはないですが、場合によっては利用することもあります。そんな時に今回のやり方を使っていただければと思います。