PowerShell 技能连载 - 带有掩码的输入

为了安全地输入信息,脚本需要显示一个掩码输入。最简单的方法是使用 Read-Host -AsSecureString 命令:

1
2
# Read-Host
$entered = Read-Host -Prompt 'Enter secret info' -AsSecureString

或者,你可以使用一个带有 [SecureString] 类型参数的函数,并将该参数设置为强制性:

1
2
3
4
5
6
7
8
9
# mandatory parameter
function test([Parameter(Mandatory)][SecureString]$Secret)
{
"You entered secret: $Secret"
return $Secret
}

# run function with mandatory parameter
$entered = test

这样,您可以免费获得一个屏蔽的输入(在控制台窗口显示为“星号”,在ISE中显示为单独的输入框),但最终得到的是安全字符串,而不是明文。以下是一个简单的函数,可用于将安全字符串转换回纯文本:

1
2
3
4
5
6
7
8
9
filter Convert-SecureStringToString
{
param([Parameter(Mandatory,ValueFromPipeline)][SecureString]$SecureString)
[Runtime.InteropServices.Marshal]::
PtrToStringAuto(
[Runtime.InteropServices.Marshal]::
SecureStringToBSTR($SecureString)
)
}

现在您可以使用屏蔽输入来询问敏感用户信息,并在内部将其作为纯文本使用:

1
2
3
# Read-Host
$entered = Read-Host -Prompt 'Enter secret info' -AsSecureString |
Convert-SecureStringToString

PowerShell 技能连载 - 带有掩码的输入

http://blog.vichamp.com/2023/07/27/masked-input/

作者

吴波

发布于

2023-07-27

更新于

2024-03-29

许可协议

评论