3

いくつかの著作権情報を表示し、サーバーに接続してから、ユーザー名とパスワードの入力を求める Windows exe があります。

したがって、これを実行するたびに、プロンプトがユーザー名とパスワードを入力するのを待つ必要があります。通常、コマンドが著作権情報を表示し始めた後、ユーザー名、パスワードを先に入力しますが、それは大雑把な方法です。

Windowsコマンドの入力プロンプトにパラメータをバッチファイルで渡すより良い方法はありますか?

PS Linuxでは、このように << 演算子を使用してこれを行います

linux_command <<delimiter
inputparamvalue1
inputparamvalue2
delimiter

linux_command が実行され、最初の入力プロンプトで inputparamvalue1 が読み取られ、次の入力プロンプトで inputparamvalue2 が読み取られます。

James への返信として、セキュリティに関するアドバイスをありがとう。私はそれを大事にします。

あなたのソリューションを実装しようとしましたが、うまくいきませんでした。

これらは私のファイルです。何かヒントがあれば見てください。

vpn.bat

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

login.txt

myusername  
mypassword

startvpn.bat

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

結果

D:\>startvpn.bat  
Cisco AnyConnect VPN Client (version 2.5.6005) .  

Copyright (c) 2004 - 2010 Cisco Systems, Inc.  
All Rights Reserved.  


  >> state: Disconnected  
  >> notice: Ready to connect.  
  >> registered with local VPN subsystem.  
  >> state: Disconnected  
  >> notice: Ready to connect.  
VPN>   >> contacting host (mycompanyvpnsite.com) for login information...  
  >> notice: Contacting mycompanyvpnsite.com.  
VPN>  
  >> Please enter your username and password.  

Username: [myusername] Password:  

表示されているユーザー名 myusername は、以前の手動ログインからキャッシュされています。したがって、この実行では login.txt から値が取得されていないようです。
パラメータなしで vpn.bat を単独で実行した場合、次のようなプロンプトが表示されます

VPN>  
  >> Please enter your username and password.  

Username: [myusername] <i press enter to take the cached value>  
Password: ******** <i enter password and press enter>  

そして繋がります。

VPN クライアントには、コマンド ラインでパスワードを指定する権限がないため、この方法を試しています。

4

2 に答える 2

2

私は働くコードを持っています!これは James K のものに似ていますが、いくつかのバグが打ち出されています。繰り返しますが、暗号化されていない設定でパスワードが公開されるため、これはかなり安全ではありません. 言われている:

'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}"

幸運を!

于 2013-03-30T18:57:50.077 に答える
1

ログインプロセスを自動化するためにユーザー名とパスワードをファイルに保存することは非常に悪い考えであり、コンピューターに電子的または物理的にアクセスできる人は誰でもプレーンテキストのユーザー名とパスワードにアクセスできるため、ユーザー名とパスワードを必要とするセキュリティが無効になります。

つまり、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実行可能ファイル (バッチ ファイル以外のもの) を呼び出すときは、を使用しても違いはありません。


編集:あなたのコメントによると、それを機能させるにはこれを行う必要があると思います:

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

この場合、 にリダイレクトしますが、これには からの入力のみを受け入れ、 が終了するまでキーボードからの入力はまったく受け付けないvpncli.exeという副作用があると思います。つまり、通常は入力する必要があるすべてのものを自動化 ( に保存) する必要があります。後で手動で操作する必要がない限り、これは問題になりません。vpncli.exe login.txtvpncli.exelogin.txtvpncli.exe


編集:キーストロークを読み取る前にバッファをクリアしているように見えるので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.RunWshShell.AppActivateを次の 2 行に置き換えるかどうかはわかりますが...

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

...メモ帳が開き、次の 2 行が表示されます。

MyUserName
MyPassword

これがうまくいかない場合は、うまくいかなかった提案しか含まれていないため、この回答を完全に削除することを考えています。

于 2012-08-31T03:04:52.197 に答える