30

SOAP サービスに接続するスクリプトを書いています。接続が確立されたら、送信するすべてのコマンドでユーザー名/パスを渡す必要があります。私が抱えている問題は、これを行うために read-host を使用すると、パスワードがクリアテキストで表示され、シェルに残ることです。

PS C:\Users\Egr> Read-Host "Enter Pass"
Enter Pass: MyPassword
MyPassword

-AsSecureString で非表示にすると、System.Security.SecureString オブジェクトになっているため、値をサービスに渡すことができなくなります。

PS C:\Users\gross> Read-Host "Enter Pass" -AsSecureString
Enter Pass: **********
System.Security.SecureString

これを渡すとうまくいきません。パスワードがクリアテキストでサービスに渡されることは気にしません。ユーザーがパスワードを入力した後、ユーザーのシェルに残りたくないだけです。Read-Host 入力を非表示にできますが、パスワードはクリアテキストとして保存できますか? そうでない場合、System.Security.SecureString オブジェクトをクリアテキストとして渡す方法はありますか?

ありがとう

4

2 に答える 2

52

$Password は Securestring であり、これはプレーン テキストのパスワードを返します。

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
于 2013-02-21T16:30:11.533 に答える
2

パスワード (入力) を変数として保存し、それをサービスに渡すことができます。コードがスクリプトまたは関数として実行される場合、パスワードを含む変数は、完了後に削除されます (一時的なローカル スコープに格納されます)。コンソールでコマンドを実行すると (または、スクリプトのドットソースを実行すると. .\myscript.ps1)、パスワード変数はセッション スコープにとどまり、削除するかセッションを閉じるまで保存されます。スクリプトの実行後に変数を確実に削除したい場合は、自分で削除できます。このような:

#Get password in cleartext and store in $password variable
$password = Read-Host "Enter Pass"

#run code that needs password stored in $password

#Delete password
Remove-Variable password

変数がスコープに格納される方法について詳しくは、about_Scopesをご覧ください。

于 2013-02-21T16:32:23.480 に答える