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.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 der bash
Shell zu emulieren . Es wird passwd
als 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 passwd
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 der passwd
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 die scriptpw.dll
Datei einfach aus dem Windows\System32
Ordner eines XP / 2003-Systems in den Ordner Winnt\System32
oder Windows\System32
auf 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.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:
@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.