Файл Windows Bash для приоритизации выполнения избыточных .exe-файлов

Файл Windows Bash для приоритизации выполнения избыточных .exe-файлов

Я использую менеджер паролей для всех своих паролей. Предпочтительный .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

Связанный контент