我有一个正在编写的脚本,它可以连接到SOAP服务。在建立连接之后,我需要在我发送的每个命令中传递一个用户名/ pass。我遇到的问题是,当我使用read-host执行此操作时,我的密码以明文形式显示,并保留在shell中:
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当我通过这个的时候,它不起作用。我不关心以明文形式传递给服务的密码,我只是不希望它们在用户输入密码后停留在用户的shell中。是否可以隐藏Read-Host输入,但仍然以明文形式存储密码?如果不是,有没有方法可以将System.Security.SecureString对象作为明文传递?
谢谢
发布于 2013-02-22 00:30:12
$Password是一个安全字符串,它将返回纯文本密码。
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))发布于 2013-02-22 00:32:23
您可以将密码(输入)保存为变量并将其传递给您的服务。如果代码在脚本中或作为函数运行,则包含密码的变量将在完成后被删除(它们存储在temp中。局部作用域)。如果您在控制台中运行命令(或者像. .\myscript.ps1这样的点源脚本),password变量将保留在会话范围内,并且它们将一直存储到您删除它或关闭会话为止。如果您希望确保在脚本运行后删除该变量,则可以自行删除它。如下所示:
#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
https://stackoverflow.com/questions/15007104
复制相似问题