Ich schreibe eine Batch-Datei, um einige andere Programme auszuführen. In diesem Fall muss ich zur Eingabe eines Passworts auffordern. Kann ich den eingegebenen Text maskieren? Ich muss keine ******* Zeichen anstelle von Eingabezeichen drucken. Das Verhalten von Linux bei der Kennwortabfrage (während der Eingabe nichts drucken) reicht aus.
@echo off
SET /P variable=Password :
echo %variable%
Pause
Dadurch wird die Eingabe gelesen, aber ich kann den Text mit diesem Ansatz nicht maskieren.
batch-file
cmd
command-prompt
Chathuranga Chandrasekara
quelle
quelle
Antworten:
Bis XP und Server 2003 können Sie ein anderes enthaltenes Tool (VBScript) verwenden - die folgenden beiden Skripte erledigen den gewünschten Job.
Erstens
getpwd.cmd
:Dann
getpwd.vbs
:Der
getpwd.vbs
Benutzer verwendet einfach das Kennwortobjekt, um das Kennwort vom Benutzer einzugeben und es dann in der Standardausgabe auszudrucken (im nächsten Absatz wird erläutert, warum dies im Terminal nicht angezeigt wird).Das
getpwd.cmd
Befehlsskript ist etwas kniffliger, funktioniert aber grundsätzlich wie folgt.Der
"<nul: set /p passwd=Password: "
Befehl bewirkt , dass die Eingabeaufforderung ohne nachfolgendes Zeilenumbruchzeichen ausgegeben wird. Dies ist eine einfache Möglichkeit, den"echo -n"
Befehl aus derbash
Shell zu emulieren . Es wirdpasswd
als irrelevanter Nebeneffekt auf eine leere Zeichenfolge gesetzt und wartet nicht auf Eingaben, da die Eingaben vomnul:
Gerät übernommen werden.Die
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
Aussage ist das schwierigste Stück. Das VBScript wird ohne Microsoft "Werbung" ausgeführt, sodass die einzige Zeilenausgabe das Kennwort (aus dem VBscript) ist"Wscript.StdOut.WriteLine strPassword"
.Das Setzen der Trennzeichen auf nichts ist erforderlich, um eine gesamte Eingabezeile mit Leerzeichen zu erfassen. Andernfalls erhalten Sie nur das erste Wort. Das
"for ... do set ..."
Bit wirdpasswd
als tatsächliche Kennwortausgabe aus dem VBScript festgelegt.Dann geben wir eine leere Zeile zurück (um die
"Password: "
Zeile zu beenden ) und das Kennwort befindet sich in derpasswd
Umgebungsvariablen, nachdem der Code ausgeführt wurde.Wie bereits erwähnt,
scriptpw.dll
ist es jetzt nur bis XP / 2003 verfügbar. Um dies zu korrigieren, können Sie diescriptpw.dll
Datei einfach aus demWindows\System32
Ordner eines XP / 2003-Systems in den OrdnerWinnt\System32
oderWindows\System32
auf Ihrem eigenen System kopieren . Nachdem die DLL kopiert wurde, müssen Sie sie registrieren, indem Sie Folgendes ausführen:Um die DLL unter Vista und höher erfolgreich zu registrieren, benötigen Sie Administratorrechte. Ich habe die Rechtmäßigkeit eines solchen Schrittes nicht geprüft, also Höhlenlektor.
Wenn Sie nicht sind allzu scharf auf versuchen , ältere DLL - Dateien aufzuspüren und registrieren (der Einfachheit halber oder aus rechtlichen Gründen), gibt es eine andere Art und Weise. In späteren Windows-Versionen (die nicht über die erforderliche DLL verfügen) sollte Powershell verfügbar sein.
Tatsächlich sollten Sie in Betracht ziehen, Ihre Skripte zu aktualisieren, um sie vollständig nutzen zu können, da sie eine viel leistungsfähigere Skriptsprache sind als
cmd.exe
. Wenn Sie jedoch den Großteil Ihres Codes alscmd.exe
Skripte behalten möchten (z. B. wenn Sie viel Code haben, den Sie nicht konvertieren möchten), können Sie denselben Trick verwenden.Ändern Sie zunächst das
cmd
Skript so, dass es Powershell anstelle von CScript aufruft:Das Powershell-Skript ist ebenso einfach:
obwohl mit etwas Marshalling, um den eigentlichen Passworttext zu erhalten.
Denken Sie daran, dass Sie zum Ausführen lokaler nicht signierter Powershell-Skripts auf Ihrem Computer möglicherweise die Ausführungsrichtlinie von der (drakonischen, wenn auch sehr sicheren) Standardeinstellung mit folgenden Elementen ändern müssen:
aus Powershell heraus.
quelle
scriptpw.dll
.Ja - ich bin 4 Jahre zu spät.
Aber ich habe einen Weg gefunden, dies in einer Zeile zu tun, ohne ein externes Skript erstellen zu müssen. durch Aufrufen von Powershell-Befehlen aus einer Batch-Datei.
Dank TessellatingHeckler - ohne Ausgabe in eine Textdatei (ich habe den Powershell-Befehl in einer Variablen festgelegt, weil er in einer langen Zeile innerhalb einer for-Schleife ziemlich chaotisch ist).
Ursprünglich habe ich es geschrieben, um es in eine Textdatei auszugeben, und dann aus dieser Textdatei gelesen. Aber die obige Methode ist besser. In einer extrem langen, nahezu unverständlichen Zeile:
Ich werde das aufschlüsseln - Sie können es mit Caret auf ein paar Zeilen aufteilen
^
, was viel schöner ist ...Dieser Artikel erklärt, was die Powershell-Befehle tun. Im Wesentlichen wird es mit eingegeben
Read-Host -AsSecureString
- die folgenden zwei Zeilen konvertieren diese sichere Zeichenfolge wieder in Klartext. Die Ausgabe (Klartext-Passwort) wird dann mit an eine Textdatei gesendet>.tmp.txt
. Diese Datei wird dann in eine Variable eingelesen und gelöscht.quelle
for /f "usebackq tokens=*" %%p in (``powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"``) do set password=%%p
und dannecho %password%
. NB. Ich kann diesen Kommentar nicht dazu bringen, Backticks richtig zu entkommen - vor "Powershell" und vor dem Ende ")" sind zwei Backticks, sollten aber ein Backtick sein.1. Reine Batch-Lösung , die (ab) den
XCOPY
Befehl und seine hier/P /L
gefundenen Schalter verwendet (einige Verbesserungen hierzu finden Sie hier ):1.2 Eine andere Möglichkeit basierend auf dem Ersetzungsbefehl
2.Password-Übermittler, der ein HTA-Popup verwendet . Dies ist eine hybrit .bat / jscript / mshta- Datei und sollte als .bat gespeichert werden :
3. Ein selbstkompilierter .net-Hybrid .Again sollte als
.bat
. Gespeichert werden. Im Gegensatz zu anderen Lösungen wird eine kleine EXE-Datei erstellt / kompiliert, die aufgerufen wird (wenn Sie möchten, können Sie sie löschen). Erfordert auch ein installiertes .net-Framework, aber das ist kein Problem:quelle
Ich würde wahrscheinlich nur tun:
Sie erhalten eine Eingabeaufforderung, und der Bildschirm wird nach der Eingabe gelöscht.
Beachten Sie, dass das eingegebene Kennwort im CMD-Verlauf gespeichert wird, wenn die Batchdatei über eine Eingabeaufforderung ausgeführt wird (Danke @Mark K Cowan ).
Wenn das nicht gut genug wäre, würde ich entweder zu Python wechseln oder eine ausführbare Datei anstelle eines Skripts schreiben.
Ich weiß, dass keine dieser Lösungen perfekt ist, aber vielleicht ist eine gut genug für dich :)
quelle
doskey /reinstall
den vorherigen Befehlspuffer unmittelbar danach ausführencls
, wenn der Befehlsverlauf in der Konsole für Sie nicht wichtig ist.C:\>start "console" cmd /c ireadconsole.bat
Sie können die Unterroutine ReadFormattedLine für alle Arten von formatierten Eingaben verwenden. Mit dem folgenden Befehl können Sie beispielsweise ein Kennwort mit 8 Zeichen lesen, Sternchen auf dem Bildschirm anzeigen und automatisch fortfahren, ohne die Eingabetaste drücken zu müssen:
Diese Unterroutine ist in reinem Stapel geschrieben, sodass kein zusätzliches Programm erforderlich ist. Sie ermöglicht mehrere formatierte Eingabeoperationen wie das Lesen von Zahlen, das Konvertieren von Buchstaben in Großbuchstaben usw. Sie können die Unterroutine ReadFormattedLine von Read a line mit einem bestimmten Format herunterladen .
EDIT 2018-08-18 : Neue Methode zur Eingabe eines "unsichtbaren" Passworts
Der Befehl FINDSTR hat einen seltsamen Fehler, der auftritt, wenn dieser Befehl verwendet wird, um Zeichen in Farbe anzuzeigen UND die Ausgabe eines solchen Befehls an das CON-Gerät umgeleitet wird. Ausführliche Informationen zur Verwendung des Befehls FINDSTR zum Anzeigen von Text in Farbe finden Sie in diesem Thema .
Wenn die Ausgabe dieser Form des FINDSTR-Befehls an CON umgeleitet wird, passiert etwas Seltsames, nachdem der Text in der gewünschten Farbe ausgegeben wurde: Der gesamte Text nach der Ausgabe als "unsichtbare" Zeichen, obwohl eine genauere Beschreibung lautet, dass der Text ist Ausgabe als schwarzer Text über schwarzem Hintergrund. Der Originaltext wird angezeigt, wenn Sie mit dem Befehl COLOR die Vordergrund- und Hintergrundfarben des gesamten Bildschirms zurücksetzen. Wenn der Text jedoch "unsichtbar" ist, können wir einen SET / P-Befehl ausführen, sodass nicht alle eingegebenen Zeichen auf dem Bildschirm angezeigt werden.
quelle
Eine andere Alternative sind meine Befehlszeilentools EditV32 (x86) oder EditV64 (x64). Beispielsweise:
-m bedeutet "maskierte Eingabe" und -p ist die Eingabeaufforderung. Die Benutzereingaben werden in der PWD-Umgebungsvariablen gespeichert. Sie können es hier bekommen:
https://westmesatech.com/?page_id=19
quelle
Wenn Sie der Mangel an Quellcode stört, habe ich eine andere Alternative.
Sie können es von https://westmesatech.com/?page_id=49 erhalten . Quellcode ist enthalten.
quelle
Wenn Sie Python installiert haben, können Sie Folgendes verwenden:
die Ausgabe:
quelle
Ich habe die obige Lösung von Blorgbeard verwendet, die meiner Meinung nach wirklich großartig ist. Dann habe ich es wie folgt verbessert:
Verwenden Sie es so:
Dadurch wird die Konsole für die Kennworteingabe auf Grau auf Grau umgeschaltet und wenn Sie fertig sind, wird wieder zurückgeschaltet. Der ESC sollte eigentlich ein nicht druckbares Zeichen sein, das Sie aus der heruntergeladenen Beispieltextdatei (erscheint im Editor wie ein Pfeil nach links) in Ihre Batchdatei kopieren können. Sie können die Beispieltextdatei verwenden, um die Codes für alle Farbkombinationen zu finden.
Wenn Sie kein Administrator des Computers sind, können Sie die Dateien wahrscheinlich in einem Nicht-Systemverzeichnis installieren. Anschließend müssen Sie das Verzeichnis an den PATH in Ihrem Skript anhängen, bevor Sie das Programm aufrufen und die Escape-Sequenzen verwenden. Dies könnte wahrscheinlich sogar das aktuelle Verzeichnis sein, wenn Sie ein nicht vom Administrator verteilbares Paket mit nur wenigen Dateien benötigen.
quelle
Erstellen Sie eine Batch-Datei, die die für unsichtbare Zeichen erforderliche aufruft, und erstellen Sie dann eine Verknüpfung für die aufgerufene Batch-Datei.
Rechtsklick
Eigenschaften
Farben
text == schwarz
Hintergrund == schwarz
anwenden
OK
hoffe also hilft dir !!!!!!!!
quelle
UPDATE:
Ich habe zwei neue Methoden hinzugefügt, die anstelle von cls zum Ausblenden der Eingabe ein neues Popup mit nur einer Zeile erstellen.
Die Nachteile sind, dass eine Methode (Methode 2) Junk in der Registrierung hinterlässt - "Wenn ohne ordnungsgemäße Rechte ausgeführt" - und die andere (Methode drei) Junk an das Skript anfügt. Unnötig zu erwähnen, dass es leicht in jede tmp-Datei geschrieben und gelöscht werden kann. Ich habe nur versucht, eine Alternative zu finden.
Einschränkung: Das Passwort kann nur alphanumerisch sein - keine anderen Zeichen!
Update: Ich fand Sachadees Post perfekt und habe gerade meine "Pop-up" -Spirale hinzugefügt.
quelle
Ich habe ein Open-Source-Programm namens geschrieben
editenv
, das meine ältereneditv32
/editv64
Dienstprogramme ersetzt:https://github.com/Bill-Stewart/editenv
Mit der Option
--maskinput
(-m
) [*] können Sie die eingegebene Eingabe ausblenden (maskieren) und haben ein konfigurierbares Zeichen (Standardzeichen ist*
). z.B:Mit der Option
--prompt
(-p
) können Sie eine Eingabeaufforderung angeben. Das Obige zeigt einePassword:
Eingabeaufforderung an und wartet darauf, dass Sie etwas eingeben. Eingegebene Zeichen werden als angezeigt*
. Durch Drücken von Ctrl+ Cwird das Programm mit einem Exit-Code von 1223 beendet.Download ist hier:
https://github.com/Bill-Stewart/editenv/releases
[*] Beachten Sie, dass die Option
--maskinput
(-m
) nicht sicher ist - die eingegebene Zeichenfolge wird in der Umgebung als Klartext eingegeben. Diese Funktion dient nur der Vereinfachung.quelle
Dies mag ein älteres Thema sein, aber wenn Sie Windows Vista oder 7 verwenden, habe ich eine Lösung, die sehr gut funktioniert. Ich habe hier ein Video davon gemacht: http://www.youtube.com/watch?v=mk8uAa6PIFM
Pastebin für die Batch-Datei ist hier
quelle
quelle
Eine andere Option, ähnlich wie bei Blorgbeard , ist die Verwendung von:
Das wird
^
ausgeblendet,>
sodass die Kennwortabfrage wie eine Standard-Cmd-Konsolenaufforderung aussieht.quelle
Ich habe alle klobigen Lösungen im Internet darüber gelesen, wie Kennwörter in einer Batchdatei maskiert werden können, diejenigen, die eine hide.com-Lösung verwenden, und sogar diejenigen, bei denen Text und Hintergrund dieselbe Farbe haben. Die hide.com-Lösung funktioniert anständig, ist nicht sehr sicher und funktioniert unter 64-Bit-Windows nicht. Mit 100% Microsoft-Dienstprogrammen gibt es also einen Weg!
Lassen Sie mich zunächst meine Verwendung erklären. Ich habe ungefähr 20 Workstations, die sich automatisch bei Windows anmelden. Sie haben eine Verknüpfung auf ihrem Desktop - zu einer klinischen Anwendung. Die Maschinen sind gesperrt, sie können nicht mit der rechten Maustaste klicken, sie können nichts anderes tun, als auf die eine Verknüpfung auf ihrem Desktop zuzugreifen. Manchmal muss ein Techniker einige Debug-Anwendungen starten, den Windows Explorer durchsuchen und Protokolldateien anzeigen, ohne das Autolog-Benutzerkonto abzumelden.
Also hier ist was ich getan habe.
Tun Sie es, wie Sie möchten, aber ich habe meine beiden Batch-Dateien auf einer Netzwerkfreigabe abgelegt, auf die der gesperrte Computer Zugriff hat.
Meine Lösung verwendet 1 Hauptkomponente von Windows - Runas. Fügen Sie den Clients eine Verknüpfung zu der runas.bat hinzu, die Sie erstellen möchten. Zu Ihrer Information, bei meinen Kunden habe ich die Verknüpfung zur besseren Anzeige umbenannt und das Symbol geändert.
Sie müssen zwei Batchdateien erstellen.
Ich habe die Batch-Dateien runas.bat und Debug Support.bat benannt
runas.bat enthält den folgenden Code:
Sie können für alle Benutzer, auf die Sie Zugriff gewähren möchten, beliebig viele hinzufügen, wenn "% un%" und wenn nicht "% un%". Das @ping ist meine Coonass-Methode, um einen Sekunden-Timer zu erstellen.
Das kümmert sich also um die erste Batch-Datei - ziemlich einfach, oder?
Hier ist der Code für Debug Support.bat:
Ich bin kein Programmierer und habe erst vor ungefähr einem Jahr angefangen, mich mit Batch-Skripten zu beschäftigen, und diese Art und Weise, wie ich herausgefunden habe, ein Passwort in einer Batch-Datei zu maskieren, ist ziemlich großartig!
Ich hoffe zu hören, dass jemand anders als ich etwas davon nutzen kann!
quelle