এক্সপি এবং সার্ভার 2003 অবধি আপনি অন্য অন্তর্ভুক্ত সরঞ্জাম (ভিবিএস স্ক্রিপ্ট) ব্যবহার করতে পারেন - নিম্নলিখিত দুটি স্ক্রিপ্টগুলি আপনি চান কাজটি করে।
প্রথম 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কমান্ড স্ক্রিপ্ট একটি বিট trickier হয় কিন্তু এটি মূলত হিসাবে অনুসরণ করে কাজ করে।
"<nul: set /p passwd=Password: "কমান্ডের প্রভাবটি হ'ল নতুন লাইনের অক্ষর ছাড়াই প্রম্পটটি আউটপুট করা - শেল "echo -n"থেকে কমান্ডটি অনুকরণ করার এটি একটি লুক্কায়িত উপায় way bashএটি passwdএকটি অপ্রাসঙ্গিক পার্শ্ব প্রতিক্রিয়া হিসাবে খালি স্ট্রিংয়ে সেট করে এবং nul:ডিভাইসটি থেকে এটির ইনপুট নেওয়ার কারণে ইনপুটটির জন্য অপেক্ষা করে না ।
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"বিবৃতি trickiest বিট। এটি কোনও মাইক্রোসফ্ট "বিজ্ঞাপন" ছাড়াই ভিবিএস স্ক্রিপ্ট চালায়, যাতে একমাত্র লাইন আউটপুটটি পাসওয়ার্ড হয় (ভিবিস্ক্রিপ্ট থেকে) "Wscript.StdOut.WriteLine strPassword"।
কিছুতেই সীমানা নির্ধারণকারীকে ফাঁকা স্থানের সাথে একটি সম্পূর্ণ ইনপুট লাইন ক্যাপচার করা প্রয়োজন, অন্যথায় আপনি কেবল প্রথম শব্দটি পান। "for ... do set ..."বিট সেট passwdVB স্ক্রিপ্ট থেকে প্রকৃত পাসওয়ার্ড আউটপুট যাবে।
তারপরে আমরা একটি ফাঁকা লাইন (লাইনটি শেষ করতে "Password: ") প্রতিধ্বনিত করব passwdএবং কোডটি চালুর পরে পাসওয়ার্ডটি পরিবেশ পরিবর্তনশীল হবে ।
এখন যেমনটি উল্লিখিত হয়েছে scriptpw.dllকেবল এক্সপি / 2003 পর্যন্ত উপলব্ধ। এটি সংশোধন করার জন্য, আপনি কেবল এক্সপি / 2003 সিস্টেমের ফোল্ডার থেকে আপনার নিজের সিস্টেমে বা ফোল্ডারে scriptpw.dllফাইলটি অনুলিপি করতে পারবেন । একবার DLL অনুলিপি করা হয়েছে, আপনি এটি চালিয়ে নিবন্ধন করতে হবে:Windows\System32Winnt\System32Windows\System32
regsvr32 scriptpw.dll
ভিস্টায় এবং পরে ডিএলএলকে সাফল্যের সাথে নিবন্ধকরণ করতে আপনার প্রশাসকের সুযোগ সুবিধাগুলি প্রয়োজন। আমি গুহা প্রভাষক এরকম পদক্ষেপের বৈধতা পরীক্ষা করি নি।
আপনি যদি পুরানো ডিএলএল ফাইলগুলি (সুবিধার্থে বা আইনী কারণে) নিখরচায় এবং নিবন্ধ করার চেষ্টা করার জন্য অতিরিক্ত মাত্রায় আগ্রহী না হন, তবে অন্য একটি উপায় আছে। উইন্ডোজের পরবর্তী সময়ে সংস্করণে (বেশী যে না প্রয়োজনীয় ডিএলএল আছে) PowerShell আপনার জন্য উপলব্ধ থাকা উচিত।
এবং, প্রকৃতপক্ষে, আপনার স্ক্রিপ্টগুলি সম্পূর্ণরূপে ব্যবহারের জন্য আপনার আপগ্রেড করার বিষয়টি বিবেচনা করা উচিত কারণ এটি এর চেয়ে অনেক বেশি সক্ষম স্ক্রিপ্টিং ভাষা cmd.exe। তবে আপনি যদি নিজের কোডের বেশিরভাগ অংশটিকে cmd.exeস্ক্রিপ্ট হিসাবে রাখতে চান (যেমন আপনার কাছে প্রচুর কোড রয়েছে যা আপনি রূপান্তর করতে চান না), আপনি একই কৌশলটি ব্যবহার করতে পারেন।
প্রথমে cmdস্ক্রিপ্টটি পরিবর্তন করুন যাতে এটি সিএসক্রিপ্টের পরিবর্তে পাওয়ারশেলকে কল করে:
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
পাওয়ারশেল লিপিটিও সমান সহজ:
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
যদিও আসল পাসওয়ার্ডের পাঠ্য পেতে কিছু মার্শেলিং সহ
মনে রাখবেন যে, আপনার মেশিনে স্থানীয় স্বাক্ষরবিহীন পাওয়ারশেল স্ক্রিপ্টগুলি চালনার জন্য, আপনাকে অবশ্যই এর মতো কিছু দিয়ে ডিফল্ট (ড্র্যাকনিয়ান, যদিও খুব নিরাপদ) থেকে এক্সিকিউশন পলিসি সংশোধন করতে হবে:
set-executionpolicy remotesigned
পাওয়ারশেলের মধ্যে থেকেই।