如何使用命令行参数加密密码?

How do I encrypt a password using command line arguments?

我需要一种在控制台中使用命令行参数加密密码而不需要通过 Get-Credential 提示的方法。示例:

.\Script.ps1 -User Blah -Password ********

我尝试了几种不同的方法,使用类型 securestring 并尝试将 Read-Host 传递到参数中,但到目前为止一切都继续在控制台中显示明文。

这是我试过的。

param ( 
   [string]$user,
   [securestring]$password)

param (
   [string]$user,
   [string]$password = $(Read-Host -AsSecureString))

非常感谢任何帮助!

谢谢,从你的评论中我想我现在更好地理解了你的问题。

您想从命令行调用脚本并提供屏蔽密码参数,而不是等待它提示您。

很遗憾,没有办法做到这一点。

只要您根本不提供 -password,您使用 Read-Host -AsSecureString 的第二个参数块就可以工作。然后脚本将提示您输入密码,密码将被屏蔽。

但这与使用Get-Credential基本相同。

假设您的密码是thePassword

你不能只做 .\Script.ps1 -user "Blah" -password "thePassword" 并期望 thePassword 变成 ***********

以下是您可以执行的一些操作。 首先,确保您的参数类型正确。您的第二个参数集起作用的原因是您将 $password 的类型设为 [String]。相反,您的参数列表应如下所示。

param(
  [String]$user,
  [SecureString]$password = $(Read-Host -AsSecureString)
)

现在,使用这段代码,如果您执行以下操作,它将失败。

.\Script.ps1 -user "Blah" -password "thePassword"

这是因为 "thePassword"[String] 而不是 [SecureString]

如果你想真正能够将密码传递到脚本中,你可以在调用脚本之外创建 [SecureString],或者有一个调用 Script.ps1 的包装脚本,或者一些其他方法。例如...

# Doing it Manually in two lines
$password = Read-Host -AsSecureString
.\Script.ps1 -user "Blah" -password $password

# Doing it Manually in one line
.\Script.ps1 -user "Blah" -password $(Read-Host -AsSecureString)

# Taking advantage of the Default Value for $password
.\Script.ps1 -user "Blah"
# Will automatically prompt for $password upon executing

# Doing it in a Wrapper Script
# You can save the following in a separate script
# OR you can add it to Script.ps1 itself
$user = Read-Host "Enter Username"
$password = Read-Host -AsSecureString "Enter Password"
.\Script.ps1 -user $user -password $password