Пакетный файл запускает программное обеспечение, которое запрашивает пароль. Можно ли сделать так, чтобы командный файл автоматически вводил пароль?

Мой вопрос не относится к PostgreSQL 9.6, но PostgreSQL 9.6 - это программа, которую я пытаюсь запустить, поэтому я буду использовать ее в качестве примера. Я также работаю на Windows 10.

РЕДАКТИРОВАТЬ: Магу дал очень конкретный ответ PostgreSQL. Если кто-то другой может дать более общий ответ, который работает, тогда я изменю, который является принятым ответом на этот вопрос.

Я запускаю следующий код в пакетном файле:

@echo off
SET/P file=Select file:
@echo on
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file1]
"%~dp0\osm2pgsql-bin\osm2pgsql.exe" --slim --drop --latlong --keep-coastlines --multi-geometry --hstore -S [file2] --tag-transform-script [file3] -W -U gisuser -H [IP adress] -d [databasename] "%file%"
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file4]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file5]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file6]
@echo off
pause
@echo on

(Все, что в скобках, является жестко заданным значением.)

когда psql.exe а также osm2pgsql.exe начать они запрашивают пароль. Это хорошо само по себе, но при их запуске несколько раз вынуждает пользователя вводить пароль несколько раз. osm2pgsql также является процессом, который занимает много времени, поэтому пользователю придется ждать между вводом пароля.

Я хочу один раз запросить у пользователя пароль, а затем автоматически ввести этот пароль, когда psql.exe и osm2pgsql.exe работают, когда запрашивают пароль.

Я попытался это безуспешно: /questions/14856418/peredacha-vhodnyih-dannyih-v-komandnuyu-stroku-v-komandnom-fajle/14856420#14856420


Для любопытных, приведенный выше код должен DROP CASCADE несколько таблиц в базе данных PostgreSQL (код SQL в file1), затем воссоздать эти таблицы из данных OpenStreetMap и, наконец, создать несколько представлений в той же базе данных (код SQL). в файлах 4, 5 и 6).

2 ответа

Решение

Со страницы PostgreSQL по выполнению командной строки psql.exe

-w --no-пароль

Никогда не вводите запрос пароля. Если серверу требуется аутентификация по паролю, а пароль недоступен другими способами, такими как файл.pgpass, попытка подключения завершится неудачно. Эта опция может быть полезна в пакетных заданиях и сценариях, где нет ни одного пользователя для ввода пароля.

Обратите внимание, что этот параметр останется установленным для всего сеанса, и поэтому он влияет на использование мета-команды \ connect, а также на начальную попытку подключения.

Итак, я бы предложил.pgpass файл это путь...

Одна возможность - использовать язык сценариев, такой как Autoit или Autohotkey.

> AutoIt

AutoIt v3 - это бесплатный базовый скриптовый язык, разработанный для автоматизации графического интерфейса Windows и общих сценариев. Он использует комбинацию смоделированных нажатий клавиш, движения мыши и манипуляций с окнами / элементами управления, чтобы автоматизировать задачи способом, невозможным или ненадежным для других языков (например, VBScript и SendKeys). AutoIt также очень маленький, автономный и будет работать на всех версиях Windows "из коробки" без навязчивых "рабочих циклов"!

>

Вы можете создать скрипт, который запускается вместе с вашим пакетом и ждет в фоновом режиме для определенного диалогового окна (диалоговое окно пароля). Если диалоговое окно распознано, вы можете запросить пароль, сохранить его в переменной и автоматически заполнить в все последующие диалоговые вызовы.

Другие вопросы по тегам