我有一个批处理文件,接受用户输入密码的输入。由于某种原因,它不会占用最后一个角色,我无法弄明白。
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
,它位于脚本的开头。
请帮助,谢谢!
答案 0 :(得分:0)
首先尝试使用您的密码,看看它是否完整
setlocal EnableDelayedExpansion
set /p password=
echo my password '!password!'
如果仍然失败,则必须涉及非ascii字符 然后你应该用chcp更改代码页。
然后你可以将它与你的代码一起使用
psexec \\%computerName% -u %domainName%\%userName% -p !password! cmd