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

时间:2015-09-24 22:01:58

标签: powershell encryption passwords

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

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

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

这是我尝试过的。

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

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

谢谢,根据您的意见,我认为我现在更了解您的问题。

您希望从命令行调用脚本并提供屏蔽的密码参数,而无需等待它提示您。

不幸的是,没有办法做到这一点。

只要您根本不提供Read-Host -AsSecureString,使用-password的第二个参数块就会有效。然后该脚本会提示您输入密码,然后屏蔽它。

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

答案 1 :(得分:1)

假设您的密码为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

OR

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

OR

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

OR

# 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