2017年2月1日

【PowerShell】SecureStringオブジェクトから元の入力文字を取得する


AsSecureStringパラメータを使用して入力された文字は、SecureStringオブジェクトとして返されますが、そのSecureStringオブジェクトから元の入力文字を取得するには次のようにします。

PS C:\work> $pass = Read-Host -AsSecureString "パスワー入力してください"
パスワー入力してください: **********
PS C:\work>
PS C:\work> $ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)
PS C:\work> [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
hirakegoma

SecureStringオブジェクトから文字列を取り出すには、Marshaleクラスを使う必要があります。

まず、SecureStringToBSTRメソッドで、マネージなSecureStringオブジェクトの内容を、アンマネージとして割り当てたバイナリ文字列(BSTR)にコピーします。次に、PtrToStringBSTRメソッドで、アンマネージメモリに格納されているバイナリ文字列(BSTR)をマネージメモリに割り当てた文字列にコピーしています。



スポンサーリンク