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.vbs
Basitç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.cmd
Komut 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 bash
kabuktan taklit etmenin sinsi bir yoludur . passwd
Alakası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 passwd
VBScript gerçek şifre çıktısı olması.
Ardından boş bir satırı yansıtırız (satırı sonlandırmak için "Password: "
) ve passwd
kod ç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.dll
dosyayı Windows\System32
bir XP / 2003 sisteminin klasöründen kendi sisteminizdeki Winnt\System32
veya Windows\System32
klasö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.exe
komut dosyaları olarak tutmak istiyorsanız (örneğin, dönüştürmek istemediğiniz çok sayıda kodunuz varsa), aynı numarayı kullanabilirsiniz.
İlk olarak, cmd
komut 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.