
Ich verwende einen Passwortmanager für alle meine Passwörter. Die bevorzugte EXE-Datei wird von einem verschlüsselten USB-Laufwerk ausgeführt. Ich habe ein Backup auf meinem Laptop in einem VeraCrypt-Container und ein weiteres auf einem Server gehostet.
Ich ziehe es vor, nur meine portable Version zu verwenden, es sei denn, ich habe sie verloren oder habe keinen Zugriff darauf. Anstatt das Verzeichnis manuell zu öffnen und die gewünschte EXE-Datei auszuführen, möchte ich den Vorgang wie folgt automatisieren:
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!")
Ich habe versucht, die Logik zeilenweise in Bash/cmd/PowerShell auszuführen – das funktioniert, ist aber aufwändiger, als einfach die Verzeichnisse zu öffnen. Dann begann ich, ein Shell-Skript zu schreiben, um den Vorgang zu automatisieren, merkte aber schnell, dass ich einige meiner Anmeldeinformationen im Klartext speichern müsste, was ich vermeiden möchte. Ich brauche keine Hilfe beim Schreiben des Codes; nach einiger Suche kann ich nicht das beste Verfahren finden, um diesen Vorgang zu automatisieren.
Welche Art von Ausführungsmethode (Shell-Skript, C/Java-Programm) wäre die effizienteste Möglichkeit, diesen Vorgang zu automatisieren, ohne die Anmeldeinformationen jemandem preiszugeben, der möglicherweise Zugriff auf die Datei erhält?
Antwort1
Die folgende Batchdatei hat meine Probleme gelöst, lässt anschließend keine CMD-Fenster hängen und stellt sicher, dass der Prozess nicht ausgeführt wird und das Laufwerk bereits gemountet ist.
Die gleiche Logik kann für jede Datei verwendet werden, die an mehreren Orten vorhanden ist. Ein CMD-Fenster bleibt nur dann geöffnet, wenn der Prozess bereits ausgeführt wird.
Wenn Sie nicht über einen bereits laufenden Prozess benachrichtigt werden möchten, entfernen Sie den :ProcessFound
Abschnitt und richten Sie die bedingte Anweisung wie folgt ein 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