Hingga XP dan Server 2003, Anda dapat menggunakan alat lain yang disertakan (VBScript) - dua skrip berikut melakukan pekerjaan yang Anda inginkan.
Pertama, getpwd.cmd:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Kemudian, getpwd.vbs:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
The getpwd.vbshanya menggunakan objek password untuk input password dari pengguna dan kemudian mencetaknya ke output standar (paragraf berikutnya akan menjelaskan mengapa yang tidak muncul di terminal).
The getpwd.cmdScript perintah adalah rumit sedikit tapi pada dasarnya bekerja sebagai berikut.
Efek dari "<nul: set /p passwd=Password: "perintah ini adalah untuk menampilkan prompt tanpa karakter baris baru - ini adalah cara licik untuk meniru "echo -n"perintah dari bashshell. Ini disetel passwdke string kosong sebagai efek samping yang tidak relevan dan tidak menunggu masukan karena mengambil masukan dari nul:perangkat.
The "for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"pernyataan adalah bit paling sulit. Ini menjalankan VBScript tanpa "iklan" Microsoft, sehingga satu-satunya keluaran baris adalah kata sandi (dari VBscript "Wscript.StdOut.WriteLine strPassword".
Mengatur pembatas menjadi tidak ada diperlukan untuk menangkap seluruh baris masukan dengan spasi, jika tidak, Anda hanya akan mendapatkan kata pertama. The "for ... do set ..."bit set passwdmenjadi output password yang sebenarnya dari VBScript.
Kemudian kami menggemakan baris kosong (untuk menghentikan "Password: "baris) dan kata sandi akan berada di passwdvariabel lingkungan setelah kode dijalankan.
Sekarang, seperti yang disebutkan, scriptpw.dllhanya tersedia hingga XP / 2003. Untuk memperbaikinya, Anda cukup menyalin scriptpw.dllfile dari Windows\System32folder sistem XP / 2003 ke folder Winnt\System32atau Windows\System32di sistem Anda sendiri. Setelah DLL disalin, Anda harus mendaftarkannya dengan menjalankan:
regsvr32 scriptpw.dll
Untuk berhasil mendaftarkan DLL di Vista dan yang lebih baru, Anda memerlukan hak administrator. Saya belum memeriksa legalitas dari langkah seperti itu jadi lektor gua.
Jika Anda tidak terlalu tertarik untuk mencoba melacak dan mendaftarkan file DLL yang lebih lama (untuk kenyamanan atau alasan hukum), ada cara lain. Versi Windows yang lebih baru (yang tidak memiliki DLL yang diperlukan) seharusnya memiliki Powershell yang tersedia untuk Anda.
Dan, pada kenyataannya, Anda benar-benar harus mempertimbangkan untuk meningkatkan skrip Anda untuk menggunakannya sepenuhnya karena ini adalah bahasa skrip yang jauh lebih mumpuni daripada cmd.exe. Namun, jika Anda ingin menyimpan sebagian besar kode Anda sebagai cmd.exeskrip (seperti jika Anda memiliki banyak kode yang tidak ingin Anda ubah), Anda dapat menggunakan trik yang sama.
Pertama, ubah cmdskrip sehingga memanggil Powershell daripada CScript:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Skrip Powershell sama sederhananya:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
meskipun dengan beberapa pengaturan untuk mendapatkan teks kata sandi yang sebenarnya.
Ingatlah bahwa, untuk menjalankan skrip Powershell lokal yang tidak ditandatangani di komputer Anda, Anda mungkin perlu mengubah kebijakan eksekusi dari default (draconian, meskipun sangat aman), dengan sesuatu seperti:
set-executionpolicy remotesigned
dari dalam Powershell itu sendiri.