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オブジェクトをクリアテキストとして渡す方法はありますか?
ありがとう
$ PasswordはSecurestringであり、これはプレーンテキストのパスワードを返します。
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
パスワード(入力)を変数として保存し、サービスに渡すことができます。コードがスクリプトまたは関数として実行される場合、パスワードを含む変数は、実行後に削除されます(これらは一時ローカルスコープに格納されます)。コンソールでコマンドを実行する場合(または. .\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