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)に戻すことができています。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント