kikimiki
Goto Top

Konfiguration putty?

Hallo,

ich möchte per batch datei oder vbs, was halt geht meinen Putty öffnen

bisher klappt alles super, bloß weiß ich nicht wie ich folgende Einstellung in die batch einbinden muss.

Im Putty unter Connections --> SSh gibt es den Punkt TUNNELS
Wie kann ich da den Source Port und die Destination im Batch hinterlgen

z.B. Source Port =1112
Destination =localhost:1112

Bisher sieht mein Script so aus:

Set WSHShell = WScript.CreateObject("WScript.Shell")  
WSHShell.Run "h:\putty\putty -ssh SERVERNAME -l USER -pw PASSWORT"  

Content-Key: 110316

Url: https://administrator.de/contentid/110316

Printed on: April 19, 2024 at 16:04 o'clock

Member: godlie
godlie Mar 02, 2009 at 11:28:48 (UTC)
Goto Top
Naja das is eigentlich ganz einfach.
Leg dir im Putty eine Session an in der du deine Sachen zurechtkonfigurierst
dann kannst du mit putty.exe -load SessionName die zuvor gespeicherte Session öffnen.
Einen weg über die commandline für Source und Target gibt es laut dokumentation leider nicht.
Member: KikiMiki
KikiMiki Mar 02, 2009 at 11:37:45 (UTC)
Goto Top
Hi godlie

perfekter Ansatz, hat geklappt wie immer ;)

ich habe jetzt eine vbs (login über putty), dann eine weitere vbs (import aus mysql DB)
Da hast du mir ja auch geholfen

Jetzt habe ich eine *.bat die zuerst den login und dann den import ausführt

jetzt bräuchte ich eine vbs um den putty wieder zu schließen, bisher mach ich das über die Kommandozeile mit Exit

Kann man das in ein vbs packen???
Member: godlie
godlie Mar 02, 2009 at 11:53:10 (UTC)
Goto Top
Hm naja theoretisch wäre dies möglich in dem du folgendes machst:

Du startest putty, startest dein 2tes script wartest bis dieses fertig ist, wenn das ding dann fertig ist kannst putty beenden.

set putty = WshShell.Exec ('putty.exe')   
set oSplit = WshShell.Exec ('cscript whaterver ...')   
Do While oSplit.Status = 0
     WScript.Sleep 100
Loop 
putty.Terminate

ich kansn bei mir grad net nachbauen aber so in die richtung müsste das funktionieren....
Member: KikiMiki
KikiMiki Mar 02, 2009 at 12:00:17 (UTC)
Goto Top
Klappt leider nicht


Also ich starten login

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "h:\putty\putty -ssh SERVERNAME -l USER -pw PASSWORT -load MYSETTINGS"

Dann wird läuft der Excel Import (wo du mir geholfen hast


Und jetzt bräcuht ich ein vbs welches mir das beim ersten Schritt geöffnete Putty schließt
Member: godlie
godlie Mar 02, 2009 at 12:20:03 (UTC)
Goto Top
Nur mal zum Verständniss:

Du hast ein vbs nenne wir es MASTER.vbs, die Aufgabe von MASTER.vbs ist es putty zu starten und deinen Import zu starten, sobald der Import abgeschlossen ist, wird die MASTER.vbs putty beenden und alles ist gut.

Also vom Ablauf her:
bat datei startet die Master.vbs die master.vbs startet putty und danach den import.vbs nachdem der import.vbs fertig ist, wird putty von Master.vbs beendet und die bat is fertig durchgelaufen.
Member: KikiMiki
KikiMiki Mar 02, 2009 at 13:12:46 (UTC)
Goto Top
Sorry ich bin jetzt aber total verwirrt, hier meine Struktur


im meinem hauptordner habe ich dir start.bat, die so aussieht:

WScript.exe skripte/01_login_putty.vbs
WScript.exe skripte/02_import_aus_DB.vbs

Beide vbs liegen im Ordner Skripte

wenn jetzt 02_import_aus_DB.vbs fertig ist soll der putty geschlossen werden.
Bisher gehe ich in die Konsole vom putty und gebe exit ein


Den Quellcode wo du gepostet hast kann ich nicht zuordnen, ist das eine neue vbs oder ersetzt deine irgendeine von mir

Sorry aber ich verstehs nicht face-sad
Member: godlie
godlie Mar 02, 2009 at 13:33:43 (UTC)
Goto Top
Also das ganze nochmal von vorne:

Das was bei dir jetzt die bat die kannste knicken brauchst nimmer.
Du nimmst deine login_putty.vbs her baust dort den Aufruf für das import_aus_db.vbs rein wartest bis das ding fertig ist und danach schliest dein login_putty.vbs das putty für dich.

Set WshShell = WScript.CreateObject("WScript.Shell")  
set putty = WshShell.Exec "h:\putty\putty -ssh SERVERNAME -l USER -pw PASSWORT -load MYSETTINGS"  
set oSplit = WshShell.Exec ('cscript 02_import_aus_db.vbs')   
Do While oSplit.Status = 0 
     WScript.Sleep 100 'hier wird gewartet bist das import.vbs fertig ist.  
Loop ' wenn import.vbs fertig ist dann   
putty.Terminate 'wird der Prozess beendet.  

somit alle Klarheiten beseitigt?
Member: KikiMiki
KikiMiki Mar 02, 2009 at 13:47:30 (UTC)
Goto Top
Sei mir nicht böse aber ich steh auf dem Schlauch

Den Code wo du gepostet hast ist das die neue 01_login_putty.vbs?????

Momentan versteh ich nur Bahnhof

Also bat hab ich gelöscht, brauch ich laut deiner Aussage nicht mehr

Dein geposteter Code ist das die 01_login_putty.vbs?

Was meinst du mit : Baust dort den Aufruf für 02_import_aus_db.vbs ein?

wie starte ich dann mein ganzes Szenario? Mit 01_login_putty.vbs?

Meine pivot.xls ist ja jetzt einen Ordner zurück
Member: godlie
godlie Mar 02, 2009 at 14:25:40 (UTC)
Goto Top
Genau du startest den ganzen Vorgang mit der 01_login_putty.vbs ob du jetzt ne bat oder vbs aufrust ist ja egal.
Das was ich dort oben gepostet habe ist eigentlich die neue 01_login_putty.vbs

probiers mal aus
Member: KikiMiki
KikiMiki Mar 02, 2009 at 14:37:46 (UTC)
Goto Top
Also ich poste meinen ganzen Code mit deinem Vorschlag hat es irgendwie nicht geklappt:

So sieht es bei mir aus.

Im meinem Hauptordner ist die pivot.xls

Hier gibt es eine Unterordner "skripte"
in diesem sind die 01_login_putty.vbs und 02_import_aus_jira.vbs enthalten
zudem gibts es hier einen Ordner putty, in dieser ist die putty.exe drin

so sieht die 01_login_putty.vbs ursprünglich aus: (mit deinem Vorschlag hat es irgendwie nicht geklappt)

Set WSHShell = WScript.CreateObject("WScript.Shell")  
WSHShell.Run "putty/putty -ssh server.systems.de -l user -pw Geheim -load MySettings"  


die 02_import_aus_jira.vbs sieht so aus:

Option Explicit

'---- CursorTypeEnum Values ----  
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1  
' Const adOpenDynamic = 2  
' Const adOpenStatic = 3  

'---- LockTypeEnum Values ----  
Const adLockReadOnly = 1
' Const adLockPessimistic = 2  
' Const adLockOptimistic = 3  
' Const adLockBatchOptimistic = 4  

'---- CursorLocationEnum Values ----  
' Const adUseServer = 2  
Const adUseClient = 3

'---- ConnectModeEnum Values ----  
' Const adModeUnknown = 0  
Const adModeRead = 1
' Const adModeWrite = 2  
' Const adModeReadWrite = 3  
' Const adModeShareDenyRead = 4  
' Const adModeShareDenyWrite = 8  
' Const adModeShareExclusive = &Hc  
' Const adModeShareDenyNone = &H10  
' Const adModeRecursive = &H400000  
Dim objExcel, objWb, SkriptPfad
Dim objSheet
Dim Conn, RS
Dim rowCount, i, headerSet



rowCount = 1

SkriptPfad = WScript.ScriptFullName 'Pfadermittlung  
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))  'Pfadermittlung  


Set objExcel = CreateObject("Excel.Application")   
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "../pivot.xls")'öffnet die angegebene xls  



objExcel.Visible = True
objExcel.Sheets("Datenbasis").Select 'wählt die Mappe Datenbasis von pivot.xls  
objExcel.Range("Datenbasis!$1:$65536").Delete 'löscht alle Inhalte von Mappe Datenbasis  

'Angabe des Tabellenblattes  
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in Tabellenblatt Datenbasis  

Set Conn = CreateObject("ADODB.Connection")  
Conn.Provider = "MSDASQL"  
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _  
          "DATABASE=dbname3123;" & _  
          "SERVER=localhost;", _  
          "user", "PW"  

Set RS = CreateObject("ADODB.Recordset")  
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung  
RS.Source = "SELECT  * from tabelle;"  
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF
'Die Spalenüberschriften einfügen Bezug aus dem SQL-Statement  
	If( headerSet = 0 ) Then
		For i = 0 to RS.Fields.Count - 1
		  objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name
		Next
		headerSet = 1
    End If
'Die dazugehörigen Werte einfügen  
	For i = 0 to RS.Fields.Count -1 
	  objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value
	Next
    rowCount = rowCount + 1
	RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing


MsgBox "Datenimport abgeschlossen! Die Datenbasis zeigt den Stand vom " & Date & " bis " & Time & "!",64, "Reporting"  
Member: godlie
godlie Mar 02, 2009 at 15:30:39 (UTC)
Goto Top
so jetzt zum letzten male:

die 01_login_putty muss das 02_import aufrufen auf dessen beendigung warten und dann alles schliesen.

01-login-putty:
Set WshShell = WScript.CreateObject("WScript.Shell")  
set putty = WshShell.Exec("putty -ssh  -l  -pw ")  
set oSplit = WshShell.Exec ("cscript 02_import_......vbs")   
Do While oSplit.Status = 0 
     WScript.Sleep 100 'hier wird gewartet bist das import.vbs fertig ist.  
Loop ' wenn import.vbs fertig ist dann   
putty.Terminate 'wird der Prozess beendet.  

achja und mit deinem Vorschlag hat es irgendwie nicht geklappt <-- ist nicht förderlich für das debuggen
Member: KikiMiki
KikiMiki Mar 02, 2009 at 15:40:29 (UTC)
Goto Top
meine neue 01_login_putty.vbs:

Set WshShell = WScript.CreateObject("WScript.Shell")  
set putty = WshShell.Exec ("putty/putty -ssh stems.de -l user -pw pass -load setting")  
set oSplit = WshShell.Exec ("02_import_aus_db.vbs")   
Do While oSplit.Status = 0 
     WScript.Sleep 100 'hier wird gewartet bist das import.vbs fertig ist.  
Loop ' wenn import.vbs fertig ist dann   
putty.Terminate 'wird der Prozess beendet.  

Fehler in Zeile 3
Fehler:02_import_aud_db.vbs ist keine zulässige Win32-Anwendung.
Code: 800700C1
Quelle:WshShell.Exec
Member: KikiMiki
KikiMiki Mar 02, 2009 at 16:07:55 (UTC)
Goto Top
Stop! Stop!
Es geht
Ich hab dich bestimmt reichlich genervt heute, vielen Dank hab es hinbekommen ;)
Member: godlie
godlie Mar 02, 2009 at 21:20:10 (UTC)
Goto Top
tja nur duch fehler fängt man an zu lernen face-smile
jetzt gehts ja wenn ich so bedenke hättest mir von anfang an erzählt was du willst wär das eine sachen von max. 2h gewesen.....
Member: KikiMiki
KikiMiki Mar 02, 2009 at 22:03:46 (UTC)
Goto Top
Ich werde versuchen mich zu bessern face-smile
Trotzdem Hut ab vor Leuten wie dir, die sich Gedanken über Probleme anderer machen und qualitativ hochwertige Ergebnisse liefern

Vielen Dank!!
Member: godlie
godlie Mar 02, 2009 at 22:09:57 (UTC)
Goto Top
Warum fragt sowas niemand an das wären 50 euronen die stunde face-smile
Ne schwerz beiseite mir wurde damals soviel gegeben wo ich noch nix konnte und gewissse sachen sind schon interessant und sowas muss ich einfach lösen ( pdfs mischen, Zusammenführen und einzelne Seiten drehen )

als dann viel spaß damit
Member: KikiMiki
KikiMiki Mar 03, 2009 at 06:34:42 (UTC)
Goto Top
Hi godlie,

due hast mir ja bei diesem vbs geholfen:

Option Explicit

'---- CursorTypeEnum Values ----  
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1  
' Const adOpenDynamic = 2  
' Const adOpenStatic = 3  

'---- LockTypeEnum Values ----  
Const adLockReadOnly = 1
' Const adLockPessimistic = 2  
' Const adLockOptimistic = 3  
' Const adLockBatchOptimistic = 4  

'---- CursorLocationEnum Values ----  
' Const adUseServer = 2  
Const adUseClient = 3

'---- ConnectModeEnum Values ----  
' Const adModeUnknown = 0  
Const adModeRead = 1
' Const adModeWrite = 2  
' Const adModeReadWrite = 3  
' Const adModeShareDenyRead = 4  
' Const adModeShareDenyWrite = 8  
' Const adModeShareExclusive = &Hc  
' Const adModeShareDenyNone = &H10  
' Const adModeRecursive = &H400000  
Dim objExcel, objWb, SkriptPfad
Dim objSheet
Dim Conn, RS
Dim rowCount, i, headerSet



rowCount = 1

SkriptPfad = WScript.ScriptFullName 'Pfadermittlung  
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))  'Pfadermittlung  


Set objExcel = CreateObject("Excel.Application")   
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "../pivot.xls")'öffnet die angegebene xls  



objExcel.Visible = True
objExcel.Sheets("Datenbasis").Select 'wählt die Mappe Datenbasis von pivot.xls  
objExcel.Range("Datenbasis!$1:$65536").Delete 'löscht alle Inhalte von Mappe Datenbasis  

'Angabe des Tabellenblattes  
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in Tabellenblatt Datenbasis  

Set Conn = CreateObject("ADODB.Connection")  
Conn.Provider = "MSDASQL"  
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _  
          "DATABASE=dbname3123;" & _  
          "SERVER=localhost;", _  
          "user", "PW"  

Set RS = CreateObject("ADODB.Recordset")  
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung  
RS.Source = "SELECT  * from tabelle;"  
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF
'Die Spalenüberschriften einfügen Bezug aus dem SQL-Statement  
	If( headerSet = 0 ) Then
		For i = 0 to RS.Fields.Count - 1
		  objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name
		Next
		headerSet = 1
    End If
'Die dazugehörigen Werte einfügen  
	For i = 0 to RS.Fields.Count -1 
	  objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value
	Next
    rowCount = rowCount + 1
	RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing


MsgBox "Datenimport abgeschlossen! Die Datenbasis zeigt den Stand vom " & Date & " bis " & Time & "!",64, "Reporting"  

Kann man diesen Code abändern um eine 2. SQL Abfrage in ein 2. Tabellenblatt einzufügen?
Meine 1. Abfrage im Code lautet ja SELECT * from tabelle; und wird in das Tabellenblatt Datenbasis improtiert.

Wenn ich jetzt eine 2. Abfrage z.B. SELECT * from Kunde; in das Tabellenblatt Kundendaten improtieren möchte. Wie müsste der Code dann aussehen?

Beides in die gleiche Datei: pivot.xls
Die Spaltenüberschriften sind bei beiden Abfragen 100 % identisch
Member: godlie
godlie Mar 04, 2009 at 13:47:46 (UTC)
Goto Top
Hallo ich komme erst morgen mal dazu dir das umzubauen das mehrere Queries machen kannst.
Ist aber eigentlich recht einfach man muss nur den Teil der den Query absetzt und dann in die entsprechenden Zeilen scrheib in eine Funktion verfrachten und mit Parametern versehen.