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:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Dann getpwd.vbs:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
Der getpwd.vbsBenutzer 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.cmdBefehlsskript 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 der bashShell zu emulieren . Es wird passwdals irrelevanter Nebeneffekt auf eine leere Zeichenfolge gesetzt und wartet nicht auf Eingaben, da die Eingaben vom nul: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 wird passwdals 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 der passwdUmgebungsvariablen, nachdem der Code ausgeführt wurde.
Wie bereits erwähnt, scriptpw.dllist es jetzt nur bis XP / 2003 verfügbar. Um dies zu korrigieren, können Sie die scriptpw.dllDatei einfach aus dem Windows\System32Ordner eines XP / 2003-Systems in den Ordner Winnt\System32oder Windows\System32auf Ihrem eigenen System kopieren . Nachdem die DLL kopiert wurde, müssen Sie sie registrieren, indem Sie Folgendes ausführen:
regsvr32 scriptpw.dll
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 als cmd.exeSkripte 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 cmdSkript so, dass es Powershell anstelle von CScript aufruft:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Das Powershell-Skript ist ebenso einfach:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
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:
set-executionpolicy remotesigned
aus Powershell heraus.