我需要一种在控制台中使用命令行参数加密密码而不通过Get-Credential
提示的方法。例如:
.\Script.ps1 -User Blah -Password ********
我尝试了几种不同的方法,使用类型securestring并尝试将Read-Host
传递给参数,但到目前为止所有内容都继续在控制台中显示明文。
这是我尝试过的。
param (
[string]$user,
[securestring]$password)
param (
[string]$user,
[string]$password = $(Read-Host -AsSecureString))
非常感谢任何帮助!
答案 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