Windows cmd симулирует консольный ввод команды - PullRequest
0 голосов
/ 14 января 2020

Мне нужно написать пакетный скрипт, который автоматически подключается к vpn, когда имя пользователя и пароль сохраняются где-то (например, в файле). VPN-клиент - это openconnect, который предоставляет интерфейс командной строки, но проблема в том, что пользовательский ввод должен быть интерактивно предоставлен команде для ее завершения.

См. Вывод ниже при запуске:

openconnect <serverhostname>

OUTPUT

POST https://<serverhostname>/
Connected to <serverhostname>:443
SSL negotiation with <serverhostname>
Server certificate verify failed: signer not found

Certificate from VPN server "<serverhostname>" failed verification.
Reason: signer not found
To trust this server in future, perhaps add this to your command line:
    --servercert pin-sha256:<somesha>
Enter 'yes' to accept, 'no' to abort; anything else to view:

Таким образом, я в основном должен набрать yes вручную и нажать Enter (также запрашивает дальнейший ввод), это необходимо автоматизировать в скрипте. Кроме того, стоит отметить, что в выводе предлагается указать параметр --server-cert, и я мог бы сделать это, но когда он запрашивает пароль, для него нет выбора.

Я попытался поместить строки ввода в файл и перенаправив это на стандартный ввод команды (который не работал, но тот же метод работал на zsh на linux)

openconnect <serverhostname> < inputfile.txt

Я также попытался передать на стандартный ввод команды, которая также не работала работать.

Я думаю, что конкретная команда не читает из stdin, а напрямую из консоли, что-то, чего я действительно не знаю, но я мог найти немного информации о чем-то, называемом «CON», в cmd .

Любое решение высоко ценится.

1 Ответ

0 голосов
/ 14 января 2020

Вы можете попробовать использовать SendKey из / гибридный скрипт:

Сохранить как .cmd и настроить время ожидания (в миллисекундах) для ответа yes в 8th в строке : WScript.Sleep 1000 :

Вы можете применить дополнительные команды, добавив правку:

WScript.Sleep [time needs]
wshshell.sendkeys "strings[command] you need"
wshshell.sendkeys "{ENTER}"


<!-- :
@echo off && rem mode 50,03 && title <nul && title .\%~nx0 
cmd /k %__APPDIR__%wScript.exe "%~dpnx0?.wsf"
goto :eof
--> <job> <script language = "vbscript">
Set WshShell = wscript.CreateObject("wscript.Shell") : WScript.Sleep 100 
wshshell.sendkeys "openconnect serverhostname" : WScript.Sleep 100  
wshshell.sendkeys "{ENTER}" : WScript.Sleep 1000 : wshshell.sendkeys "yes"
wshshell.sendkeys "{ENTER}" : 'for exit cmd /k add this line wshshell.sendkeys "exit" : wshshell.sendkeys "{ENTER}"
</script></job>

код:


Set WshShell = wscript.CreateObject("wscript.Shell")
WScript.Sleep 100 
wshshell.sendkeys "openconnect serverhostname"
WScript.Sleep 100  
wshshell.sendkeys "{ENTER}"
WScript.Sleep 1000
wshshell.sendkeys "yes"
wshshell.sendkeys "{ENTER}" 
'for exit cmd /k add this 2 line:
wshshell.sendkeys "exit"
wshshell.sendkeys "{ENTER}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...