我有一个批处理文件,它接受用户输入的密码。由于某种原因,它不需要最后一个字符,我无法弄清楚。批处理文件中未设置最后一个字符的密码
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: "
测试它仍然无法呼应的最后一个字符。
按我的意见,如果我使用的语句这里是:
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
我的问题是2的3个领域,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
,这是在脚本的开始。
请帮忙,谢谢!
使用它,我想密码的最后一个字符是像'&^%'或'!'特殊字符和延迟扩充被启用。尝试'echo psexec.exe“\\%computerName%”-u“%domainName%\%userName%”-p“%password%”cmd“。任何情况下,执行'psexec.exe'都应该使用双引号。但是,如果密码包含启用延迟扩展的'%'或'!',则最好使用'echo psexec.exe“\\%computerName%”-u“%domainName%\%userName%”-p“!password!” cmd“,当然还有'setlocal EnableDelayedExpansion'。 – Mofi
老实说,难道你不能只是从PowerShell运行psexec,而不是做一个让SecureString再次变得不安全的糟糕舞蹈吗? – Joey
@joey我想我可以。 –