我有一个从其他一些帖子拼凑起来的简单例子:
[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
Run Code Online (Sandbox Code Playgroud)
如何使用 powershell 的 read-host 功能接受外部服务的密码?
运行脚本时,如何屏蔽输入的密码?
所以而不是这个:
PS C:\temp> .\test.ps1 -FileLocation C:\Temp\file.csv -Password secret
Run Code Online (Sandbox Code Playgroud)
这个
PS C:\temp> .\test.ps1 -FileLocation C:\Temp\file.csv -Password ******
Run Code Online (Sandbox Code Playgroud)
小智 8
首先使用以下语句捕获密码:
$password = Read-Host "Enter Your Password" -AsSecureString
Run Code Online (Sandbox Code Playgroud)
这将屏蔽用户在屏幕上输入的字符。
但是你不能直接使用这个字符串。为了在脚本中使用此安全字符串,您需要将其转换为二进制字符串:
$Newpass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
Run Code Online (Sandbox Code Playgroud)
然后$Newpass作为用户输入的密码使用。
首先,你的例子不会发生。您建议您希望在执行脚本之前使用任何 shell 来屏蔽密码,因为密码是作为参数输入的,甚至在脚本执行之前。没有发生。
现在,另一种选择是不接受密码作为参数,而是每次都提示输入密码。在这种情况下,您可以将整个If($Password)语句简化为:
$SecretPassword = Read-Host 'Type your secret password' -AsSecureString
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7840 次 |
| 最近记录: |