
Я использую менеджер паролей для всех своих паролей. Предпочтительный .exe запускается с зашифрованного USB-накопителя. У меня есть резервная копия на моем ноутбуке внутри контейнера VeraCrypt, а другая размещена на сервере.
Я предпочитаю использовать только мою портативную версию, если только я не потерял ее или не имею к ней доступа. Вместо того, чтобы вручную открывать каталог и запускать .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 — это работает, но требует больше работы, чем простое открытие каталогов. Затем я начал писать скрипт оболочки, чтобы автоматизировать процесс, но быстро понял, что мне придется хранить некоторые из моих учетных данных в открытом виде, чего я хотел бы избежать. Мне не нужна помощь с написанием кода; после поиска я не могу найти лучшую процедуру для автоматизации этого процесса.
Какой метод выполнения (скрипт оболочки, программа на 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