密码文件中设置的密码不包含最后一个字符

时间:2016-11-22 08:21:22

标签: powershell batch-file cmd psexec

我有一个批处理文件,接受用户输入密码的输入。由于某种原因,它不会占用最后一个角色,我无法弄明白。

powershell -Command $pword = read-host "Enter password " -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt
echo psexec \\%computerName% -u %domainName%\%userName% -p %password% cmd

我知道它不是powershell命令,因为我用set /p password="Enter password: "测试它并且仍然无法回显最后一个字符。

根据我的评论,这里是我使用的if语句:

    set /P domainName=
    set params = %*:"=""?!
    if "%domainName%" == "1" (
      set "domainName=domain1"
      goto nextstep
    )
    if "%domainName%" == "2" (
      set "domainName=domain2"
      goto nextstep
    )
    if "%domainName%" == "3" (
      set "domainName=domain3"
      goto nextstep
    ) else (
      goto resetfile
    )

    :nextstep

我的问题是,对于3个域中的2个,psexec运行。对于domain1,它不会运行。我回应了这个命令,它打印得很完美。当我从命令中删除echo时,它会跳过所有这些并重新启动文件。

nextstep是:

    :nextstep
    set /p userName="Enter your Admin username: "
    powershell -Command $pword = read-host "Enter password " -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt
    psexec \\%computerName% -u %domainName%\%userName% -p %password% cmd
    :resetfile
    set resetfile=
    set /p resetfile="Do you want to restart this file? Press 'y' for Yes or 'n' for No then Press ENTER: "
    if not '%resetfile%'=='' set resetfile=%resetfile:~0,1%
    if '%resetfile%'=='y' goto start

脚本甚至不会询问我是否要重新启动脚本。它只是循环回到:start,它位于脚本的开头。

请帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

首先尝试使用您的密码,看看它是否完整

setlocal EnableDelayedExpansion
set /p password=
echo my password '!password!'

如果仍然失败,则必须涉及非ascii字符 然后你应该用chcp更改代码页。

然后你可以将它与你的代码一起使用

psexec \\%computerName% -u %domainName%\%userName% -p !password! cmd