J'ai ce fichier batch que j'ai écrit pour ouvrir PuTTY et je veux en faire un script universel pour les autres. Le script est le suivant
@echo off
::Written by Mark Gulick::
::Today's Date 20150316::
set /p U="Enter Username: "
set /p P="Enter Password: "
set /p DC="Enter DC Number: "
start /d "C:\Program Files (x86)\PuTTY\" PuTTY.EXE %U%@b0%DC%db -pw %P%
pause
Je voudrais que le mot de passe n'apparaisse pas et j'ai essayé certaines zones ici et je n'en ai pas trouvé un qui fonctionnera. Je me trompe peut-être aussi. Je suis un peu rouillé sur mes scripts. Suis-je en train de manquer quelque chose ou dois-je utiliser autre chose que la commande set?
Vous pouvez faire quelque chose comme ça:
@echo off & setlocal DisableDelayedExpansion
Title %~n0
Mode 50,5 & Color 0E
set /p U="Enter Username : "
Call:InputPassword "Enter Password" P
set /p DC="Enter DC Number: "
setlocal EnableDelayedExpansion
start /d "C:\Program Files (x86)\PuTTY\" PuTTY.EXE !U!@b0!DC!db -pw !P!
pause
::***********************************
:InputPassword
Cls
echo.
echo.
set "psCommand=powershell -Command "$pword = read-Host '%1' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set %2=%%p
)
goto :eof
::***********************************
Cet article sur DOSTips fait référence à un article ici par MC ND, mais je ne trouve pas l'original, alors le voici à nouveau. Chaque fois que vous souhaitez obtenir un mot de passe et masquer l'entrée, il suffit de call :getPassword target_variable input_Prompt
où target_variable
est le nom de la variable dans laquelle vous stockez le mot de passe et input_Prompt
est tout ce que vous montrez à l'utilisateur pour l'inviter à entrer son mot de passe.
@echo off
set /p "user_name=Enter username here:"
call :getPassword user_password "Enter password here: "
:: The user's password has been stored in the variable %user_password%
exit /b
::------------------------------------------------------------------------------
:: Masks user input and returns the input as a variable.
:: Password-masking code based on http://www.dostips.com/forum/viewtopic.php?p=33538#p33538
::
:: Arguments: %1 - the variable to store the password in
:: %2 - the Prompt to display when receiving input
::------------------------------------------------------------------------------
:getPassword
set "_password="
:: We need a backspace to handle character removal
for /f %%a in ('"Prompt;$H&for %%b in (0) do rem"') do set "BS=%%a"
:: Prompt the user
set /p "=%~2" <nul
:keyLoop
:: Retrieve a keypress
set "key="
for /f "delims=" %%a in ('xcopy /l /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
set "key=%key:~-1%"
:: If No keypress (enter), then exit
:: If backspace, remove character from password and console
:: Otherwise, add a character to password and go ask for next one
if defined key (
if "%key%"=="%BS%" (
if defined _password (
set "_password=%_password:~0,-1%"
set /p "=!BS! !BS!"<nul
)
) else (
set "_password=%_password%%key%"
set /p "="<nul
)
goto :keyLoop
)
echo/
:: Return password to caller
set "%~1=%_password%"
goto :eof
les fichiers batch ne peuvent pas faire cela seuls, mais si vous exécutez batch, cela signifie que vous êtes probablement sur Windows et que VBScript est automatiquement installé. Vous pouvez l'utiliser pour obtenir un mot de passe avec masquage:
echo Blah blah blah...
:: Call a vbscript file with the outputs being set as a variable
for /f "usebackq tokens=*" %%r in (`wscript "password.vbs"`) do set retPass=%%r
:: Write back the input for example's sake.
echo What you typed in: %retPass%
'Call this script from a batch file to input a masked password
set objPassword = createObject("scriptPW.password")
wScript.stdOut.write "Input Password:"
strPassword = objPassword.getPassword()
wScript.echo strPassword
Notez que je réponds à cela sur mobile, et en tant que tel, je ne peux pas tester si cette méthode fonctionne toujours. Cependant, il fait passer l'idée principale.