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 ..."
비트 세트 passwd
VBScript를 실제의 패스워드 출력한다.
그런 다음 빈 줄을 에코하고 (줄을 종료하기 위해 "Password: "
) passwd
코드가 실행 된 후 암호가 환경 변수에 있습니다.
이제 언급했듯이 scriptpw.dll
XP / 2003까지만 사용할 수 있습니다. 이를 수정하기 위해 XP / 2003 시스템의 폴더에서 사용자 시스템 의 또는 폴더로 scriptpw.dll
파일을 복사하면 됩니다 . DLL이 복사되면 다음을 실행하여 등록해야합니다.Windows\System32
Winnt\System32
Windows\System32
regsvr32 scriptpw.dll
Vista 이상에서 DLL을 성공적으로 등록하려면 관리자 권한이 필요합니다. 나는 그런 이동의 합법성을 조사하지 않았기 때문에 동굴 강사.
편의 또는 법적 이유로 오래된 DLL 파일을 추적하고 등록하는 데 지나치게 관심 이 없다면 다른 방법이 있습니다. 최신 버전의 Windows ( 필수 DLL 이없는 버전 )에는 Powershell을 사용할 수 있어야합니다.
그리고 실제로 스크립트를 완전히 사용하기 위해 스크립트를 업그레이드하는 것을 고려해야합니다 cmd.exe
.. 그러나 코드의 대부분을 cmd.exe
스크립트 로 유지하려는 경우 (예 : 변환하고 싶지 않은 코드가 많은 경우 ) 동일한 트릭을 사용할 수 있습니다.
먼저 cmd
CScript가 아닌 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 자체 내에서.