web-dev-qa-db-fra.com

Commande de fichier batch Masquer le mot de passe

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?

11
Mark Gulick

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     
::***********************************
6
Hackoo

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_Prompttarget_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
7
SomethingDark

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:


randomThing.bat

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%

password.vbs

'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.

1
Bloodied