我有一个脚本,我正在写一个连接到SOAP服务。连接建立后,我需要在我发送的每个命令中传递一个用户名/通行证。我遇到的问题是,当我使用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对象以明文形式传递?
谢谢
3条答案
按热度按时间ecbunoof1#
$Password是一个Securestring,这将返回纯文本密码。
xv8emn3q2#
你可以保存密码(输入)作为变量并将其传递给您的服务。如果代码在脚本中或作为函数运行,则包含密码的变量将在完成后删除(它们存储在临时本地作用域中)。如果在控制台中运行命令(或者像
. .\myscript.ps1
这样的脚本),密码变量将留在会话范围内,并且它们将被存储,直到你删除它或关闭会话。如果你想确保在脚本运行后删除变量,你可以自己删除它。像这样:要了解有关变量如何存储在作用域中的更多信息,请查看about_Scopes
fnvucqvd3#
在PowerShell版本6.x+中有一种方法可以做到这一点: