Ma commande de fichier .bat pour obtenir la saisie de l'utilisateur à partir de la ligne de commande est
set /p weblogicpassword=Enter weblogic password:%=%
Ma commande de fichier .sh pour obtenir les entrées de l'utilisateur à partir du script bash est
echo -n "Enter weblogic password: "
read weblogicpassword
Maintenant, lorsque nous entrons des valeurs pour mot de passe, ces valeurs sont visibles dans la ligne de commande . Comment nous pouvons obtenir les valeurs de mot de passe à partir de la ligne de commande qui devraient être invisibles pour les utilisateurs comme * *
Pour bash son read -s
.
-s Silent mode. If input is coming from a terminal, characters are not echoed.
Pour lot, cela semble être plus compliqué.
Lisez à ce sujet ici: Puis-je masquer un texte saisi dans un fichier bat
En utilisant powershell, nous pouvons y parvenir en 32 ainsi qu'en 64 bits.
@ECHO OFF
set "psCommand=powershell -Command "$pword = read-Host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
echo %password%
En utilisant cela, nous pouvons obtenir un mot de passe avec *** en ligne de commande
Dans le script bash, nous pouvons y parvenir en utilisant le code ci-dessous.
#!/bin/bash
Prompt="Enter Password:"
while IFS= read -p "$Prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]; then
break
fi
if [[ $char == $'\177' ]]; then
Prompt=$'\b \b'
password="${password%?}"
else
Prompt='*'
password+="$char"
fi
done
echo " "
echo "Done. Password=$password"
Les options de la commande de lecture sont les suivantes: - p: Chaîne d'invite .- r: ne pas utiliser de barre oblique inverse comme caractère d'échappement .- s: mode silencieux, les entrées ne sont pas répercutées .- n 1: nombre de caractères à saisir.
read renvoie 0 sauf si\0 est rencontré et le caractère que l'utilisateur tape est placé dans la variable char.
La partie IFS = efface la variable IFS, ce qui garantit que tous les caractères d'espace ou de tabulation que vous tapez sont inclus dans le mot de passe plutôt que d'être analysés par lecture.
Voici une solution pour Windows 32 bits.
@echo off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>%temp%\ftp.com
set /p password=What is your password? <nul
for /f "tokens=*" %%i in ('%temp%\ftp.com') do set "password=%%i"
del %temp%\ftp.com
echo password is "%password%"
pause
Je lis toutes les réponses et j'en fixe une.
Ce code demande à l'utilisateur un mot de passe. Vous pouvez changer le mot de passe dans if "%password%"=="SuperUser"
.
Il vérifie l'entrée et si l'entrée est valide (SuperUser), elle passe à l'étiquette 1
.
:1
echo True
cls
exit
rem Or false goto 2
:2
echo False
cls
exit
Voici le code:
@echo off
set "psCommand=powershell -Command "$pword = read-Host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1
:Again
set "psCommand=powershell -Command "$pword = read-Host 'Wrong Password?. Try Again' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1
:2
goto Again
:1
echo Valid password
pause>nul