HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 自作関数 Tips メニュー

06.SecureStringから文字列を取得する

 
UPDATE:2008/05/02    
 



 Read-Hostコマンドレットのパラメータに -assecurestring というのがあるんですが、このパラメータを使用すると、ユーザーが入力する文字列が * で表示されます。

 -assecurestringを使用すると、変数の型がSystem.Security.SecureStringになります。

System.Security.SecureString型のデータはこのままでは使用できません。

 このままでif文などで比較しても正しい結果は得られないので、解読してString型に変換する必要があります。

 そこで、SecureStringをString型に変換する関数を作成してみました。

Convert-ToStringBSTR.ps1

#===============================================================================
# Convert-ToStringBSTR: SecurityString文字列を解読した値を返す
#
# 使用例
# PS > Convert-ToStringBSTR $SecurityString
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#===============================================================================
function global:Convert-ToStringBSTR
{
Param([System.Security.SecureString]$SecureString)

$ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)
$pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)

return $pass
}

使用方法ですが、まずはこの関数を使用してみるためにSecurityString文字列を作成してみましょう。
Read-Hostコマンドレットで -AsSecureString パラメータを使用すると、コマンドラインで文字列を入力したときに * で表されます。
-AsSecureString を使用すると入力した文字は * で伏せられSecureString型となります。

List1

PS > $pass = Read-Host "パスワードを入力" -AsSecureString
パスワードを入力: ****

次にConvert-ToStringBSTR関数を使用して、List1で作成したSecureString型をString型に変換してみたいと思います。

使用方法は簡単で、関数名の後にSecureStringを指定するだけです。(List2)

List2

PS > Convert-ToStringBSTR $pass
hiro