Передача значений в промежуточные (runtime) запросы ввода команды Windows

У меня есть windows exe, который отображает некоторую информацию об авторских правах, подключается к серверу, а затем запрашивает ввод имени пользователя и пароля.

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

Есть ли лучший способ передать параметры во входное приглашение команды windows в пакетном файле, чтобы я мог всегда печатать их всегда?

P.S. В Linux мы делаем это, используя < такой оператор

linux_command <
<p>linux_command будет запускаться и в первом приглашении на ввод, он считывает inputparamvalue1 и в следующем приглашении ввода, он считывает inputparamvalue2</p> <p>В ответ Джеймсу, спасибо за советы по безопасности. Я позабочусь об этом.</p> <p>Я попытался реализовать ваше решение, но это не сработало.</p> <p>Это мои файлы. Посмотрите, есть ли у вас подсказки.</p> <p>vpn.bat</p> <pre class="prettyprint linenums">@ echo off "C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe" connect "mycompanyvpnsite.com"</pre> <p>login.txt</p> <pre class="prettyprint linenums">myusername mypassword</pre> <p>startvpn.bat</p> <pre class="prettyprint linenums">@ECHO OFF CALL vpn.bat &lt; login.txt ECHO I'm back!</pre> <p>Результат</p> <pre class="prettyprint linenums">D:\&gt;startvpn.bat Cisco AnyConnect VPN Client (version 2.5.6005) . Copyright (c) 2004 - 2010 Cisco Systems, Inc. All Rights Reserved. &gt;&gt; state: Disconnected &gt;&gt; notice: Ready to connect. &gt;&gt; registered with local VPN subsystem. &gt;&gt; state: Disconnected &gt;&gt; notice: Ready to connect. VPN&gt; &gt;&gt; contacting host (mycompanyvpnsite.com) for login information... &gt;&gt; notice: Contacting mycompanyvpnsite.com. VPN&gt; &gt;&gt; Please enter your username and password. Username: [myusername] Password:</pre> <p>Имя пользователя myusername, которое он показывает, кэшируется из моих предыдущих ручных логинов. Таким образом, похоже, что этот запуск не принимал никаких значений из файла login.txt.  Если бы я выполнил мой vpn.bat самостоятельно без каких-либо параметров, я бы получил приглашение вроде этого</p> <pre class="prettyprint linenums">VPN&gt; &gt;&gt; Please enter your username and password. Username: [myusername] &lt;i press="" enter="" to="" take="" the="" cached="" value=""&gt; Password: ******** &lt;i enter="" password="" and="" press=""&gt; &lt;/i&gt;&lt;/i&gt;</pre><i press="" enter="" to="" take="" the="" cached="" value=""><i enter="" password="" and="" press=""> <p>и он соединяется.</p> <p>Клиент vpn не имеет права указывать пароль в командной строке, поэтому я так стараюсь.</p> </i></i>
2 ответа

У меня есть рабочий код! Это похоже на Джеймса К, но с несколькими ошибками. Еще раз хочу повторить, что это довольно неуверенно, потому что он раскрывает ваш пароль в незашифрованном виде. это сказано:

'Anyconnect login script
Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
' rather clunky way of selecting the correct directory - open to suggestion
oShell.Run "cmd /k cd %PROGRAMFILES(x86)%\Cisco & cd Cisco* & vpncli.exe connect MYCOMPANYVPN.COM"
' sleep of 100 neccessary or else it opens multiple cmd windows
Wscript.sleep 100
' activate correct window
oShell.AppActivate "Connect"
' optional ipsec Identifier used for multiple VPN profiles on the same server
'(if you don't have one, just comment this out)
oShell.SendKeys "IPSECID{ENTER}"
' Send Username and Password to Active Window.
oShell.SendKeys "USERNAME{ENTER}"
oShell.SendKeys "USERPASSSWORD{ENTER}"
oShell.SendKeys "exit{ENTER}"

Удачи!


Сохранение имени пользователя и пароля в файле для автоматизации процессов входа в систему - очень плохая идея и недействительность любой безопасности, требующей использования имен пользователей и паролей, потому что любой, кто получит электронный или физический доступ к вашему компьютеру, получит доступ к вашему имени пользователя с открытым текстом и пароль.

Тем не менее, в командной строке DOS/Windows вам понадобится дополнительный файл, содержащий ваше имя пользователя и пароль, например:

LOGIN.TXT

MyUserName
MyPassword

Затем передайте этот файл в вашу команду следующим образом:

@ECHO OFF
CALL Command_Or_Batch < login.txt
ECHO I'm back!

Это будет действовать так же, как если бы вы были на консоли и набрали MyUserName[ENTER] MyPassword[ENTER].

LOGIN.TXT - это простой текстовый файл с ванильным шрифтом, и ему не требуется расширение .txt или любое расширение вообще.

Оператор CALL необходим только при запуске другого командного файла, если вы хотите, чтобы он, когда закончил, продолжал выполнение в исходном пакетном файле вызова. Использование CALL не имеет значения при вызове исполняемого файла (ничего, кроме командного файла).

EDIT: В соответствии с вашими комментариями, я считаю, что вам нужно сделать это, чтобы заставить его работать:

@ echo off 
"C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe" connect "mycompanyvpnsite.com" < login.txt

В этом случае вы перенаправляетесь на свой vpncli.exe, но я считаю, что это будет иметь побочный эффект: vpncli.exe ТОЛЬКО принимать входные данные LOGIN.TXT, а не с клавиатуры до тех пор, пока vpncli.exe не выйдет. Это означает, что вам нужно будет автоматизировать (сохранить в LOGIN.TXT) все, что вам обычно нужно вводить. Это не должно быть проблемой, если вам не нужно вручную взаимодействовать с vpncli.exe позже.

EDIT: Поскольку vpncli.exe, кажется, очищает буфер перед чтением любых нажатий клавиш, я полагаю, что, возможно, использование VBS может привести вас туда, куда вы хотите.

VPN.VBS   Пример VBScript   Установить WshShell = WScript.CreateObject( "WScript.Shell" )

WshShell.Run "C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe connect mycompanyvpnsite.com"
' You need to know the name of the window, It should be in the upper left corner
' I'm guessing that it will be the filename of the executible
WshShell.AppActivate "vpncli.exe"
' Send Username and Password to Active Window.
WshShell.SendKeys "MyUserName{ENTER}"
WshShell.SendKeys "MyPassword{ENTER}"

Но я не могу быть уверен. У меня были проблемы с тестированием этого, хотя я просто подпрыгиваю между командами и сценариями VBS.

Хотя я знаю, если вы замените WshShell.Run и WshShell.AppActivate со следующими двумя строками, которые...

WshShell.Run "%windir%\notepad.exe"
WshShell.AppActivate "Notepad"

... откроется блокнот и появятся следующие две строки:

MyUserName
MyPassword

Если это не сработает для вас, я думаю об удалении этого ответа полностью, поскольку он содержит только предложения, которые не сработали.

licensed under cc by-sa 3.0 with attribution.