Do XP i Server 2003 możesz użyć innego dołączonego narzędzia (VBScript) - dwa poniższe skrypty wykonają zadanie, które chcesz.
Po pierwsze getpwd.cmd
:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Następnie getpwd.vbs
:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
Po getpwd.vbs
prostu używa obiektu password do wprowadzenia hasła od użytkownika, a następnie wypisuje je na standardowe wyjście (następny akapit wyjaśnia, dlaczego nie pojawia się to w terminalu).
getpwd.cmd
Skrypt poleceń jest nieco trudniejsze, ale to w zasadzie działa w następujący sposób.
Efektem "<nul: set /p passwd=Password: "
polecenia jest wyświetlenie zachęty bez końcowego znaku nowej linii - jest to sprytny sposób na emulację "echo -n"
polecenia z bash
powłoki. Ustawia passwd
pusty łańcuch jako nieistotny efekt uboczny i nie czeka na dane wejściowe, ponieważ pobiera dane wejściowe z nul:
urządzenia.
To "for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
stwierdzenie jest najtrudniejsze. Uruchamia VBScript bez "reklam" Microsoftu, więc jedyną linią wyjściową jest hasło (z VBscript "Wscript.StdOut.WriteLine strPassword"
.
Ustawienie ograniczników na zero jest wymagane, aby przechwycić cały wiersz wejściowy ze spacjami, w przeciwnym razie otrzymasz tylko pierwsze słowo. Te "for ... do set ..."
zestawy bitów passwd
być rzeczywista moc hasło z VBScript.
Następnie wywołujemy echo pustej linii (aby zakończyć "Password: "
linię), a hasło będzie w passwd
zmiennej środowiskowej po uruchomieniu kodu.
Teraz, jak wspomniano, scriptpw.dll
jest dostępny tylko do XP / 2003. Aby to naprawić, możesz po prostu skopiować scriptpw.dll
plik z Windows\System32
folderu systemu XP / 2003 do folderu Winnt\System32
lub Windows\System32
we własnym systemie. Po skopiowaniu biblioteki DLL należy ją zarejestrować, uruchamiając:
regsvr32 scriptpw.dll
Aby pomyślnie zarejestrować bibliotekę DLL w systemie Vista lub nowszym, będziesz potrzebować uprawnień administratora. Nie badałem legalności takiego posunięcia, więc jaskiniowiec.
Jeśli nie jesteś przesadnie zainteresowany próbami wyśledzenia i zarejestrowania starszych plików DLL (dla wygody lub ze względów prawnych), istnieje inny sposób. Późniejsze wersje systemu Windows (te, które nie mają wymaganej biblioteki DLL) powinny mieć dostępny program PowerShell.
I faktycznie, naprawdę powinieneś rozważyć uaktualnienie swoich skryptów, aby w pełni go używać, ponieważ jest to znacznie bardziej wydajny język skryptowy niż cmd.exe
. Jeśli jednak chcesz zachować większość swojego kodu jako cmd.exe
skrypty (na przykład jeśli masz dużo kodu, którego nie chcesz konwertować), możesz użyć tej samej sztuczki.
Najpierw zmodyfikuj cmd
skrypt tak, aby wywoływał Powershell zamiast CScript:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Skrypt Powershell jest równie prosty:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
chociaż z pewnym uporządkowaniem, aby uzyskać faktyczny tekst hasła.
Pamiętaj, że aby uruchomić lokalne niepodpisane skrypty Powershell na swoim komputerze, może być konieczne zmodyfikowanie zasad wykonywania z (drakońskiej, choć bardzo bezpiecznej) wartości domyślnej, na przykład:
set-executionpolicy remotesigned
z samego Powershell.