XP ve Server 2003'e kadar, başka bir araçtan (VBScript) yararlanabilirsiniz - aşağıdaki iki komut dosyası istediğiniz işi yapar.
İlk olarak getpwd.cmd:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Daha sonra getpwd.vbs:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
getpwd.vbsBasitçe girişine kullanıcıdan şifreyi şifre nesnesini kullanır ve sonra (yani terminalde görünmüyor neden sonraki paragraf açıklayacağız) standart çıkışa yazdırmak.
getpwd.cmdKomut komut biraz daha zordur ama temelde aşağıdaki gibi çalışır.
"<nul: set /p passwd=Password: "Komutun etkisi, komut isteminin sonunda satırsonu karakteri olmadan çıktısını almaktır - bu, "echo -n"komutu bashkabuktan taklit etmenin sinsi bir yoludur . passwdAlakasız bir yan etki olarak boş bir dizeye ayarlar ve nul:cihazdan girdi aldığı için girdi beklemiyor .
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"İfadesi en zor biraz. VBScript'i Microsoft "reklamı" olmadan çalıştırır, böylece tek satır çıktısı paroladır (VBscript'ten "Wscript.StdOut.WriteLine strPassword".
Sınırlayıcıları hiçbir şeye ayarlamak boşluklarla tüm bir giriş satırını yakalamak için gerekli değildir, aksi takdirde sadece ilk kelimeyi alırsınız. "for ... do set ..."Bit setleri passwdVBScript gerçek şifre çıktısı olması.
Ardından boş bir satırı yansıtırız (satırı sonlandırmak için "Password: ") ve passwdkod çalıştırıldıktan sonra şifre ortam değişkeninde olur.
Şimdi, belirtildiği gibi scriptpw.dll, yalnızca XP / 2003'e kadar kullanılabilir. Bunu düzeltmek için, scriptpw.dlldosyayı Windows\System32bir XP / 2003 sisteminin klasöründen kendi sisteminizdeki Winnt\System32veya Windows\System32klasörüne kopyalayabilirsiniz. DLL kopyalandıktan sonra, şunu çalıştırarak kaydetmeniz gerekir:
regsvr32 scriptpw.dll
DLL'yi Vista ve sonraki sürümlere başarıyla kaydettirmek için yönetici ayrıcalıklarına ihtiyacınız olacaktır. Mağara bekçisi böyle bir hareketin yasallığını incelemedim.
Eski DLL dosyalarını bulmaya ve kaydetmeye fazla hevesli değilseniz (kolaylık veya yasal nedenlerle), başka bir yol var. Windows'un sonraki sürümlerinde (olanları yok gerekli DLL) size Powershell mevcut olmalıdır.
Ve aslında, komut dosyalarınızı tam olarak kullanacak şekilde yükseltmeyi düşünmelisiniz çünkü bu, bundan çok daha yetenekli bir betik dili cmd.exe. Bununla birlikte, kodunuzun büyük bir kısmını cmd.exekomut dosyaları olarak tutmak istiyorsanız (örneğin, dönüştürmek istemediğiniz çok sayıda kodunuz varsa), aynı numarayı kullanabilirsiniz.
İlk olarak, cmdkomut dosyasını CScript yerine Powershell'i çağıracak şekilde değiştirin :
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Powershell betiği de aynı derecede basittir:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
gerçek şifre metnini almak için biraz sıralama olsa da.
Makinenizde yerel imzasız Powershell komut dosyalarını çalıştırmak için, yürütme politikasını (çok güvenli olsa da) varsayılandan aşağıdaki gibi değiştirmeniz gerekebileceğini unutmayın:
set-executionpolicy remotesigned
Powershell'in içinden.