PowerShellでパスワード入力に最適なread-hostを使う

PowerShellでパスワード入力に最適なread-hostを使う

PowerShellでread-hostを使ってみます。

これは入力を促すだけなんです。以下、read-hostとタイプして入力待ちになったので、abcとタイプした例です。

PS C:\work_ps> read-host
abc
abc
PS C:\work_ps>

入力した文字列がコンソールに出力されます。

ちょっとこれではわかりにくいので、プロンプトを指定してみます。

PS C:\work_ps> read-host prompt
prompt: test
test
PS C:\work_ps>

read-hostの第一引数に文字列を指定すると、その文字列がプロンプト名になります。

例えばパスワードなんかは以下のようにするとわかりやすいです。

PS C:\work_ps> read-host pass
pass: abc
abc
PS C:\work_ps>

どうせならパスワードの場合は入力を隠したいですね。-AsSecureStringパラメータを指定すると入力した文字列が*で隠されます。

PS C:\work_ps> read-host pass -AsSecureString
pass: ***
System.Security.SecureString
PS C:\work_ps>

でも使い道がいまいちよくわかりません。

変数にread-hostの戻り値を代入すると入力された文字列が返されます。以下、例です。

PS C:\work_ps> $ret = read-host pass -AsSecureString
pass: ****
PS C:\work_ps> $ret
System.Security.SecureString
PS C:\work_ps>

戻り値で戻ってきているのですが、System.Security.SecureString型の為、表示してくれません。

これを表示するように型変換するのがSecureStringToBSTR、PtrToStringBSTRです。以下、例です。

PS C:\work_ps> $ret = read-host pass -AsSecureString
pass: ******
PS C:\work_ps> $ret2 = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($ret)
PS C:\work_ps> [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ret2)
abcdef
PS C:\work_ps>

これで暗号化された文字列が平文(今回はabcdef)に戻すことができています。

コメント

タイトルとURLをコピーしました