我有一个从其他帖子中拼凑而来的简单例子:
[CmdletBinding(
DefaultParameterSetName = 'Secret'
)]
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(
Mandatory = $True,
ParameterSetName = 'Secret'
)]
[Security.SecureString]${Type your secret password},
[Parameter(
Mandatory = $True,
ParameterSetName = 'Plain'
)]
[string]$Password
)
if ($Password) {
$SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
$SecretPassword = ${Type your secret password}
}
Write-Host $SecretPassword
$BSTR = `
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecretPassword)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Write-Host $PlainPassword
如何使用powershell的读-主机函数来接受外部服务的密码?
在运行脚本时,如何使输入的密码被屏蔽?
所以,不是这样的:
PS C:\temp> .\test.ps1 -FileLocation C:\Temp\file.csv -Password secret
这
PS C:\temp> .\test.ps1 -FileLocation C:\Temp\file.csv -Password ******
发布于 2017-02-07 12:01:03
首先,你的例子不会发生。您建议在脚本执行之前,希望它们执行脚本的任何shell隐藏密码,因为密码是作为参数输入的。不会发生的。
现在,另一种方法是不接受密码作为参数,而是每次都提示输入密码。在这种情况下,可以将整个If($Password)
语句简化为:
$SecretPassword = Read-Host 'Type your secret password' -AsSecureString
发布于 2017-02-08 00:12:15
首先,使用以下语句捕获密码:
$password = Read-Host "Enter Your Password" -AsSecureString
这将掩盖用户在屏幕上输入的字符。
但是你不能直接使用这个字符串。为了在脚本中使用此安全字符串,需要将其转换为二进制字符串:
$Newpass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
然后使用$Newpass
作为用户输入的密码。
发布于 2017-02-07 11:45:09
AsSecureString参数是这样做的:
-AsSecureString 指示cmdlet以星号(*)代替用户键入的输入字符。
https://stackoverflow.com/questions/42098521
复制