Mein .bat-Dateibefehl zum Abrufen von Benutzereingaben über die Befehlszeile lautet
set /p weblogicpassword=Enter weblogic password:%=%
Mein Befehl .sh file, um Benutzereingaben aus dem Bash-Skript zu erhalten, ist
echo -n "Enter weblogic password: "
read weblogicpassword
Wenn wir nun einige Werte für das Kennwort eingeben, sind diese Werte in der Befehlszeile sichtbar. Wie können wir die Kennwortwerte von der Befehlszeile erhalten, die für Benutzer wie * * unsichtbar sein sollte?
Für bash ist dessen read -s
.
-s Silent mode. If input is coming from a terminal, characters are not echoed.
Für Batch scheint es komplizierter zu sein.
Lesen Sie hier darüber: Kann ich einen Eingabetext in einer bat-Datei maskieren
Durch die Verwendung von Powershell können wir dies sowohl in 32 als auch in 64 Bit erreichen.
@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%
Auf diese Weise können wir ein Passwort mit *** in der Befehlszeile erhalten
In einem Bash-Skript können wir dies erreichen, indem Sie den folgenden Code verwenden.
#!/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"
Die Optionen des read-Befehls sind: - p: Eingabeaufforderungszeichenfolge .- r: Verwenden Sie keinen Backslash als Escape-Zeichen .-s: Silent-Modus, Eingaben werden nicht zurückgegeben .- n 1: Anzahl der Zeichen, die eingegeben werden sollen.
read gibt 0 zurück, sofern nicht\0 angetroffen wird, und das Zeichen, das der Benutzer eingibt, wird in die Variable char eingefügt.
Der IFS = -Part löscht die IFS-Variable, wodurch sichergestellt wird, dass Leerzeichen oder Tabulatorzeichen, die Sie eingeben, im Kennwort enthalten sind, anstatt durch Lesen analysiert zu werden.
Hier ist eine Lösung für Windows 32-Bit.
@echo off
echo hP1X500P[PZBBBfh#b##[email protected]`$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
Ich habe alle Antworten gelesen und eine korrigiert.
Dieser Code fordert den Benutzer zur Eingabe eines Passworts auf. Sie können das Passwort in if "%password%"=="SuperUser"
ändern.
Es prüft die Eingabe und wenn die Eingabe gültig ist (SuperUser), geht sie zum Label 1
.
:1
echo True
cls
exit
rem Or false goto 2
:2
echo False
cls
exit
Hier ist der 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