输入带掩码的密码

dro*_*oss 2 powershell

我有一个从其他一些帖子拼凑起来的简单例子:

[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)

https://social.technet.microsoft.com/wiki/contents/articles/4546.working-with-passwords-secure-strings-and-credentials-in-windows-powershell.aspx

如何使用 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作为用户输入的密码使用。


The*_*ian 3

首先,你的例子不会发生。您建议您希望在执行脚本之前使用任何 shell 来屏蔽密码,因为密码是作为参数输入的,甚至在脚本执行之前。没有发生。

现在,另一种选择是不接受密码作为参数,而是每次都提示输入密码。在这种情况下,您可以将整个If($Password)语句简化为:

$SecretPassword = Read-Host 'Type your secret password' -AsSecureString
Run Code Online (Sandbox Code Playgroud)