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"문은 까다로운 비트입니다. Microsoft "광고"없이 VBScript를 실행하므로 유일한 줄 출력은 암호 (VBscript "Wscript.StdOut.WriteLine strPassword".
공백이있는 전체 입력 행을 캡처하려면 구분 기호를 아무것도 설정하지 않아도됩니다. 그렇지 않으면 첫 번째 단어 만 표시됩니다. "for ... do set ..."비트 세트 passwdVBScript를 실제의 패스워드 출력한다.
그런 다음 빈 줄을 에코하고 (줄을 종료하기 위해 "Password: ") passwd코드가 실행 된 후 암호가 환경 변수에 있습니다.
이제 언급했듯이 scriptpw.dllXP / 2003까지만 사용할 수 있습니다. 이를 수정하기 위해 XP / 2003 시스템의 폴더에서 사용자 시스템 의 또는 폴더로 scriptpw.dll파일을 복사하면 됩니다 . DLL이 복사되면 다음을 실행하여 등록해야합니다.Windows\System32Winnt\System32Windows\System32
regsvr32 scriptpw.dll
Vista 이상에서 DLL을 성공적으로 등록하려면 관리자 권한이 필요합니다. 나는 그런 이동의 합법성을 조사하지 않았기 때문에 동굴 강사.
편의 또는 법적 이유로 오래된 DLL 파일을 추적하고 등록하는 데 지나치게 관심 이 없다면 다른 방법이 있습니다. 최신 버전의 Windows ( 필수 DLL 이없는 버전 )에는 Powershell을 사용할 수 있어야합니다.
그리고 실제로 스크립트를 완전히 사용하기 위해 스크립트를 업그레이드하는 것을 고려해야합니다 cmd.exe.. 그러나 코드의 대부분을 cmd.exe스크립트 로 유지하려는 경우 (예 : 변환하고 싶지 않은 코드가 많은 경우 ) 동일한 트릭을 사용할 수 있습니다.
먼저 cmdCScript가 아닌 Powershell을 호출하도록 스크립트를 수정합니다 .
@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 스크립트를 실행하려면 다음과 같이 (매우 안전하지만 매우 안전한) 기본값에서 실행 정책을 수정해야 할 수 있습니다.
set-executionpolicy remotesigned
Powershell 자체 내에서.