สูงสุด 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
เพียงใช้วัตถุรหัสผ่านเพื่อใส่รหัสผ่านของผู้ใช้และจากนั้นพิมพ์ออกมาตรฐาน (ย่อหน้าถัดไปจะอธิบายว่าทำไมไม่แสดงขึ้นใน terminal)
getpwd.cmd
คำสั่งสคริปต์เป็น trickier บิต แต่มันเป็นพื้นทำงานดังนี้
เอฟเฟกต์ของ"<nul: set /p passwd=Password: "
คำสั่งคือการส่งออกพรอมต์โดยไม่มีอักขระขึ้นบรรทัดต่อท้ายซึ่งเป็นวิธีที่แอบแฝงในการจำลอง "echo -n"
คำสั่งจากbash
เชลล์ มันตั้งค่าpasswd
เป็นสตริงว่างเป็นผลข้างเคียงที่ไม่เกี่ยวข้องและไม่รอการป้อนข้อมูลเนื่องจากรับอินพุตจากnul:
อุปกรณ์
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
คำสั่งเป็นบิตยาก มันทำงาน VBScript กับไมโครซอฟท์ไม่มี "การโฆษณา" เพื่อให้การส่งออกเพียงบรรทัดคือรหัสผ่าน (จาก "Wscript.StdOut.WriteLine strPassword"
VBscript
การตั้งค่าตัวคั่นเป็นอะไรไม่จำเป็นต้องจับบรรทัดอินพุตทั้งหมดด้วยช่องว่างมิฉะนั้นคุณจะได้คำแรก "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
ในการลงทะเบียน DLL บน Vista และใหม่กว่าคุณจะต้องมีสิทธิ์ของผู้ดูแลระบบ ฉันยังไม่ได้ตรวจสอบความถูกต้องตามกฎหมายของการย้ายดังกล่าวดังนั้นผู้บรรยายในถ้ำ
หากคุณไม่กระตือรือร้นที่จะพยายามติดตามและลงทะเบียนไฟล์ DLL รุ่นเก่ามากเกินไป (เพื่อความสะดวกหรือเหตุผลทางกฎหมาย) มีอีกวิธีหนึ่ง Windows รุ่นที่ใหม่กว่า (รุ่นที่ไม่มี DLL ที่จำเป็น) ควรมี Powershell ให้คุณใช้งาน
cmd.exe
และในความเป็นจริงคุณควรพิจารณาปรับสคริปต์ของคุณจะใช้มันได้อย่างเต็มที่เนื่องจากเป็นภาษาสคริปต์ที่มีความสามารถมากขึ้นกว่า อย่างไรก็ตามหากคุณต้องการเก็บโค้ดจำนวนมากไว้เป็นcmd.exe
สคริปต์ (เช่นหากคุณมีโค้ดจำนวนมากที่ไม่ต้องการแปลง) คุณสามารถใช้เคล็ดลับเดียวกันได้
ขั้นแรกให้แก้ไขcmd
สคริปต์เพื่อให้เรียกว่า Powershell แทนที่จะเป็น 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
แม้ว่าจะมีมาร์แชลลิ่งเพื่อรับข้อความรหัสผ่านจริง
โปรดจำไว้ว่าในการเรียกใช้สคริปต์ Powershell ในเครื่องที่ไม่ได้ลงนามในเครื่องของคุณคุณอาจต้องแก้ไขนโยบายการดำเนินการจากค่าเริ่มต้น (draconian แม้ว่าจะปลอดภัยมาก) โดยมีสิ่งต่างๆเช่น:
set-executionpolicy remotesigned
จากภายใน Powershell เอง