隐藏在控制台中输入的密码-批处理脚本

时间:2019-03-26 19:35:40

标签: powershell batch-file

BAT文件中使用的Powershell命令消除了用户在控制台中指定的密码中可用的转义字符并将其保存在文件中。

我有一个BAT脚本,它提示用户在控制台中指定密码。用户在控制台中键入密码时,密码应屏蔽为*****。密码将类似于wel!123。该密码将保存到变量中,并最终复制到文本文件中。我很少有人建议在BAT文件中使用以下代码,但是实际密码(Wel!123)中的转义字符已消除,并将密码Wel123保存到login.txt文件中。

SetLocal
set "psCmd=powershell -Command "$pwd = read-host 'Enter Your Password' - 
AsSecureString; $BSTR= 
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd); 
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /F "usebackq delims=" %%# in (`%psCmd%`) do set "pwd=%%#"

@echo %pwd%>>login.txt

2 个答案:

答案 0 :(得分:1)

要将其转换为PowerShell,您已经编写了大多数代码:

$pwd = Read-Host 'Enter Your Password' -AsSecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) | Add-Content -Path login.txt

答案 1 :(得分:1)

!个字符消失与PowerShell无关-它建议cmd.exe的{​​{1}}选项有效,在在哪种情况下,enabledelayedexpansion用作变量名定界符-在这种情况下,孤立的!字符。只是丢弃

顺便说一句:!因此不是转义字符。

因此,您需要:

  • 使用! 禁用延迟变量扩展:

    • 请注意,默认情况下延迟扩展是 off ,因此您环境中的某些设备必须已将其打开。
  • 另外,正如Squashman所指出的那样,setLocal disabledelayedexpansion个字符-^的转义字符。 (用引号括起来的字符串)将被“吃掉”,因此您必须转义所有cmd.exe个字符。为^ ,您可以使用 ^^

将它们放在一起:

%pwd:^=^^%