我使用以下脚本在命令行传递SQL凭据,但我需要用户输入SQL用户的密码而不是其中的Windows凭据,并确保密码不以明文形式显示插入提示中。这是我的剧本:
Param(
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[string]$dbusername="",
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[string]$password="",
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[string]$Machine=""
)
这很好用,但我想确保用户在提示符中插入密码时隐藏密码。
我已经用这条线做了
Read-Host -Prompt "Enter your password" -AsSecureString
但这不能插入Param块,我之后插入它没有效果。
如果用户在提示符处插入密码,我该如何屏蔽密码?
答案 0 :(得分:1)
对于PS V3,转换为securestring即[securestring]$password=""
就足够了。
在使用应用程序之前,您必须将此securestring转换回纯文本。这可以通过以下方式完成:
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($password)
$clearpassword = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)