如何使用命令行参数加密密码?
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
我需要一种在控制台中使用命令行参数加密密码而不需要通过 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