XP および Server 2003 までは、付属の別のツール (VBScript) を使用できます。次の 2 つのスクリプトは、必要な作業を実行します。
まず、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 を利用できるはずです。
実際、スクリプトは .NET よりもはるかに優れたスクリプト言語であるため、スクリプトを完全に使用するにはアップグレードを検討する必要があります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 自体から。