Lên đến XP và Server 2003, bạn có thể sử dụng một công cụ đi kèm khác (VBScript) - hai tập lệnh sau sẽ thực hiện công việc bạn muốn.
Thứ nhất, getpwd.cmd
:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Sau đó, getpwd.vbs
:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
Đơn getpwd.vbs
giản là sử dụng đối tượng mật khẩu để nhập mật khẩu từ người dùng và sau đó in nó ra đầu ra tiêu chuẩn (đoạn tiếp theo sẽ giải thích tại sao điều đó không hiển thị trong thiết bị đầu cuối).
Các getpwd.cmd
lệnh lệnh phức tạp hơn một chút nhưng về cơ bản nó hoạt động như sau.
Tác dụng của "<nul: set /p passwd=Password: "
lệnh là xuất ra dấu nhắc không có ký tự dòng mới ở cuối - đó là một cách lén lút để mô phỏng "echo -n"
lệnh từ trình bash
bao. Nó đặt passwd
thành một chuỗi trống như một tác dụng phụ không liên quan và không đợi đầu vào vì nó lấy đầu vào từ nul:
thiết bị.
Các "for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
tuyên bố là bit khó khăn nhất. Nó chạy VBScript mà không có "quảng cáo" của Microsoft, do đó đầu ra dòng duy nhất là mật khẩu (từ VBscript "Wscript.StdOut.WriteLine strPassword"
.
Đặt dấu phân cách thành không bắt buộc phải ghi lại toàn bộ dòng đầu vào có dấu cách, nếu không bạn chỉ nhận được từ đầu tiên. Các "for ... do set ..."
bộ chút passwd
là ra mật khẩu thực tế từ VBScript.
Sau đó, chúng tôi lặp lại một dòng trống (để kết thúc "Password: "
dòng) và mật khẩu sẽ nằm trong passwd
biến môi trường sau khi mã đã chạy.
Bây giờ, như đã đề cập, scriptpw.dll
chỉ có sẵn cho XP / 2003. Để khắc phục điều này, bạn chỉ cần sao chép scriptpw.dll
tệp từWindows\System32
thư mục của hệ thống XP / 2003 vào Winnt\System32
hoặc Windows\System32
thư mục trên hệ thống của riêng bạn. Sau khi DLL đã được sao chép, bạn sẽ cần đăng ký nó bằng cách chạy:
regsvr32 scriptpw.dll
Để đăng ký thành công DLL trên Vista trở lên, bạn cần có đặc quyền của quản trị viên. Tôi đã không kiểm tra tính hợp pháp của một động thái như vậy nên kẻ lừa đảo hang động.
Nếu bạn không quá quan tâm đến việc cố gắng theo dõi và đăng ký các tệp DLL cũ hơn (vì lý do thuận tiện hoặc pháp lý), có một cách khác. Các phiên bản Windows mới hơn (những phiên bản không có DLL bắt buộc) sẽ có sẵn Powershell cho bạn.
Và, trên thực tế, bạn thực sự nên xem xét việc nâng cấp các tập lệnh của mình để sử dụng nó đầy đủ vì nó là một ngôn ngữ kịch bản có khả năng hơn nhiều cmd.exe
. Tuy nhiên, nếu bạn muốn giữ phần lớn mã của mình nhưcmd.exe
tập lệnh (chẳng hạn như nếu bạn có nhiều mã mà bạn không muốn chuyển đổi), bạn có thể sử dụng thủ thuật tương tự.
Đầu tiên, hãy sửa đổi cmd
tập lệnh để nó gọi Powershell thay vì CScript:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Tập lệnh Powershell cũng đơn giản như nhau:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
mặc dù với một số điều chỉnh để có được văn bản mật khẩu thực tế.
Hãy nhớ rằng, để chạy các tập lệnh Powershell chưa được ký cục bộ trên máy của bạn, bạn có thể cần phải sửa đổi chính sách thực thi từ mặc định (hà khắc, mặc dù rất an toàn), với những thứ như:
set-executionpolicy remotesigned
từ bên trong chính Powershell.