
私はすべてのパスワードにパスワード マネージャーを使用しています。推奨される .exe は暗号化された USB ドライブから実行されます。ラップトップの VeraCrypt コンテナー内にバックアップがあり、もう 1 つはサーバー上にホストされています。
紛失したりアクセスできなくなったりしない限り、ポータブル バージョンのみを使用することを好みます。ディレクトリを手動で開いて、使用したい .exe ファイルを実行する代わりに、次のようにプロセスを自動化したいと思います。
File pManager = PasswordManager.exe
File U = USB.pManager
File L = Laptop.pManager
File S = Server.pManager
if (USB.isConnected && U.isPresent): Run --> U
if (!USB.isConnected && L.isPresent): Run => L
else (Server.Connect)
if (S.isPresent): Run=> S
else:
Message("Find your USB Key!")
bash/cmd/PowerShell でロジックを 1 行ずつ実行してみましたが、これは機能しますが、単にディレクトリを開くよりも手間がかかります。その後、プロセスを自動化するシェル スクリプトを書き始めましたが、資格情報の一部をプレーン テキストで保存する必要があることにすぐに気付きました。これは避けたいことです。コードの作成についてはサポートは必要ありません。検索しても、このプロセスを自動化する最適な手順が見つかりません。
ファイルにアクセスする可能性のある人に資格情報を公開せずにこのプロセスを自動化する最も効率的な方法は、どのような実行方法 (シェル スクリプト、C/Java プログラム) でしょうか?
答え1
次のバッチ ファイルは私の問題を解決し、その後 CMD ウィンドウがハングしたままにならず、プロセスが実行されていないこととドライブがすでにマウントされていることを確認します。
複数の場所に存在するファイルに対しても同じロジックを使用できます。CMD ウィンドウが開いたままになるのは、プロセスがすでに実行されている場合のみです。
すでに実行中のプロセスについて通知を受けたくない場合は、:ProcessFound
セクションを削除し、条件文を次のように指定しますgoto END
。
:: Batch file to open Password Manager. Prefer .exe located on USB drive
:: If USB not mounted, open local (D:) version.
@echo off
SETLOCAL EnableExtensions
set EXE=PWManager.exe
set USB="F:\Password\PWManager.exe"
set HDD="D:\Software\Password\PWManager.exe"
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound
goto ProcessNotFound
:ProcessFound
echo %EXE% is already running. Ensure it is running from the correct location...
pause
goto END
:ProcessNotFound
if exist f:\ (
goto USBMounted
)
goto USBNotMounted
:USBMounted
start "" %USB%
goto END
:USBNotMounted
start "" %HDD%
goto END
:END
exit