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.vbs
hanya 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.cmd
Script 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 bash
shell. Ini disetel passwd
ke 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 passwd
menjadi output password yang sebenarnya dari VBScript.
Kemudian kami menggemakan baris kosong (untuk menghentikan "Password: "
baris) dan kata sandi akan berada di passwd
variabel lingkungan setelah kode dijalankan.
Sekarang, seperti yang disebutkan, scriptpw.dll
hanya tersedia hingga XP / 2003. Untuk memperbaikinya, Anda cukup menyalin scriptpw.dll
file dari Windows\System32
folder sistem XP / 2003 ke folder Winnt\System32
atau Windows\System32
di 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.exe
skrip (seperti jika Anda memiliki banyak kode yang tidak ingin Anda ubah), Anda dapat menggunakan trik yang sama.
Pertama, ubah cmd
skrip 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.