Home > Windows にまつわる e.t.c.

PowerShell でパスワードとかのシークレット文字列を対話入力する


PowerShell で対話式に文字列入力する場合は Read-Host を使うことが多いです。-Prompt を指定すればガイダンスも表示できるので便利ですね。

PS C:\> $Message = Read-Host -Prompt "Input message"
Input message: abcd
PS C:\>
$Message
abcd

 

パスワードとかのシークレット文字列だと入力文字が見えてしまうので、-AsSecureString を指定します。

PS C:\> $SecretMessage = Read-Host -Prompt "Input secret message" -AsSecureString
Input secret message: *****
PS C:\> $SecretMessage
System.Security.SecureString

 

入力文字が伏字になりますが、得られたのはセキュアストリングなので、このままでは入力された文字列を扱うことができません。
平文を得るために、セキュアストリングから平文にコンバートする関数を作ります。

#################################################
# セキュアストリングから平文にコンバートする
#################################################
function SecureString2PlainString($SecureString){
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)
    $PlainString = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($BSTR)

    # $BSTRを削除
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)

    return $PlainString
}

 

関数の引数にセキュアストリングを渡すと、平文が得られます。

PS C:\> $PlainMessage = SecureString2PlainString $SecretMessage
PS C:\> $PlainMessage
abcde

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.