XP और Server 2003 तक, आप किसी अन्य शामिल टूल (VBScript) का उपयोग कर सकते हैं - निम्नलिखित दो स्क्रिप्ट आप जो काम चाहते हैं।
पहला getpwd.cmd
:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
तब getpwd.vbs
:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
getpwd.vbs
बस उपयोगकर्ता से पासवर्ड इनपुट करने के लिए पासवर्ड वस्तु का उपयोग करता है और उसके बाद मानक आउटपुट में इसे प्रिंट (अगले अनुच्छेद क्यों कि टर्मिनल में दिखाई नहीं देता समझा जाएगा)।
getpwd.cmd
आदेश स्क्रिप्ट थोड़ा जटिल काम है, लेकिन यह मूल रूप से इस प्रकार काम करता है।
"<nul: set /p passwd=Password: "
कमांड का प्रभाव नई ट्रेलिंग चरित्र के साथ प्रॉम्प्ट को आउटपुट करना है - यह शेल "echo -n"
से कमांड का अनुकरण करने का एक डरपोक तरीका है bash
। यह passwd
एक अप्रासंगिक साइड इफेक्ट के रूप में एक खाली स्ट्रिंग पर सेट होता है और इनपुट का इंतजार नहीं करता क्योंकि यह nul:
डिवाइस से इसका इनपुट ले रहा है।
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
बयान trickiest बिट है। यह कोई Microsoft "विज्ञापन" के साथ VBScript चलाता है, ताकि केवल लाइन आउटपुट पासवर्ड (VBscript से) हो "Wscript.StdOut.WriteLine strPassword"
।
कुछ भी नहीं करने के लिए सीमांकक की स्थापना के लिए रिक्त स्थान के साथ एक संपूर्ण इनपुट लाइन पर कब्जा करने की आवश्यकता होती है, अन्यथा आपको केवल पहला शब्द मिलता है। "for ... do set ..."
बिट सेट passwd
VBScript से वास्तविक पासवर्ड उत्पादन किया जाना है।
तब हम एक रिक्त लाइन (लाइन को समाप्त करने के लिए "Password: "
) को गूंजते हैं और passwd
कोड चलने के बाद पासवर्ड पर्यावरण चर में होगा ।
अब, जैसा कि उल्लेख किया गया है, scriptpw.dll
केवल XP / 2003 तक उपलब्ध है। इसे ठीक करने के लिए, आप scriptpw.dll
फ़ाइल को Windows\System32
XP / 2003 सिस्टम के फ़ोल्डर से Winnt\System32
या Windows\System32
अपने सिस्टम पर फ़ोल्डर में कॉपी कर सकते हैं। एक बार DLL की प्रतिलिपि हो जाने के बाद, आपको इसे चलाकर पंजीकृत करना होगा:
regsvr32 scriptpw.dll
Vista और बाद में DLL को सफलतापूर्वक पंजीकृत करने के लिए, आपको व्यवस्थापक विशेषाधिकारों की आवश्यकता होगी। मैंने इस तरह के एक कदम की वैधता की जाँच नहीं की है इसलिए गुफा लेक्टर।
यदि आप पुराने DLL फ़ाइलों (सुविधा या कानूनी कारणों से) को ट्रैक करने और पंजीकृत करने के प्रयास में अत्यधिक उत्सुक नहीं हैं , तो एक और तरीका है। विंडोज के बाद के संस्करणों (जिनके पास आवश्यक DLL नहीं है) को आपके लिए Powershell उपलब्ध होना चाहिए।
और, वास्तव में, आपको वास्तव में इसे पूरी तरह से उपयोग करने के लिए अपनी स्क्रिप्ट को अपग्रेड करने पर विचार करना चाहिए, क्योंकि यह भाषा की तुलना में बहुत अधिक सक्षम स्क्रिप्टिंग भाषा है cmd.exe
। हालाँकि, यदि आप अपने कोड के बल्क को cmd.exe
स्क्रिप्ट के रूप में रखना चाहते हैं (जैसे कि यदि आपके पास बहुत अधिक कोड है जिसे आप कनवर्ट नहीं करना चाहते हैं), तो आप उसी ट्रिक का उपयोग कर सकते हैं।
सबसे पहले, cmd
स्क्रिप्ट को संशोधित करें ताकि यह CScript की बजाय पॉवर्स को कॉल करे:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Powershell स्क्रिप्ट समान रूप से सरल है:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
हालांकि वास्तविक पासवर्ड पाठ प्राप्त करने के लिए कुछ मार्शलों के साथ।
याद रखें कि, अपनी मशीन पर स्थानीय अहस्ताक्षरित स्क्रिप्ट को चलाने के लिए, आपको निष्पादन नीति (ड्रैकोनियन, हालांकि बहुत सुरक्षित) से संशोधित करने की आवश्यकता हो सकती है, जैसे कुछ:
set-executionpolicy remotesigned
पॉवरशेल के भीतर से ही।