Batch-Datei auf Netzwerkrechner (VM) von lokalem Rechner mit VB-Programm ausführen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von stevez.

    Batch-Datei auf Netzwerkrechner (VM) von lokalem Rechner mit VB-Programm ausführen

    Firma, Abteilung Qualitätssicherung. Auf mehreren VMs werden Testdurchläufe (durch eine Batch gesteuert) ausgeführt. Diese Batch möchte ich mit einem Testprogramm, welches ich geschrieben habe, von einem Haupt-Arbeitsplatzrechner aus starten (über das Intranet). Die entsprechenden Konten der VMs, auf denen die Batch ausgeführt werden soll, besitzen KEINE Admin-Rechte, aber ich habe Zugriff auf das Admin-Konto.

    -> VB-Programm auf Hauptrechner (Win7 Pro x64)
    -> Virtuelle Maschinen = Win7 Pro x86
    -> Starten der Batch über Intranet/Local-IP auf der VM (=anderem Rechner)
    -> erkennen, wenn die Batch Datei geschlossen wurde (auf dem anderen Rechner)

    Thx LG
    Setz doch einen Schalter in Form einer Datei auf jede VM.
    In der Datei speicherst du aus deinem Programm ein Bit, Wort oder eine Zahl.
    In der VM lässt die Datei über ne Überwachung immer abfragen und wenn der Wert der Einstellung entspricht, wird das programm gestartet.

    Oder brauchst zum ausführen der batch auf den VM´s auf Adminrechte?

    tulla schrieb:


    Setz doch einen Schalter in Form einer Datei auf jede VM.
    In der Datei speicherst du aus deinem Programm ein Bit, Wort oder eine Zahl.
    In der VM lässt die Datei über ne Überwachung immer abfragen und wenn der Wert der Einstellung entspricht, wird das programm gestartet.

    Oder brauchst zum ausführen der batch auf den VM´s auf Adminrechte?

    Das wäre etwas umständlich, meinst Du nicht? Momentan habe ich es so, dass auf jeder VM das Programm läuft und man über VMware in der VM (über das Programm) die Batch mit entsprechenden Parametern startet. Diese Batch wird überwacht, sodass das Programm erkennt, wann die Batch sich beendet, um den Testdurchlauf einzulesen. Das ganze muss jetzt nur netzwerkübergreifend angepasst werden
    nimm doch einen der diversen Sample-TCP-Chats und modifiziere den Client, dass er den empfangenen Text (der Inhalt der Batchdateien) in eine Datei schreibt und diese mit der Process-Klasse ausführt.

    Ein Client kann dann das Ergebnis seines Durchlaufs an den Server zurückgeben und dieser kann das auf Wunsch allen anderen Clients mitteilen.

    FuFu^^ schrieb:

    nimm doch einen der diversen Sample-TCP-Chats und modifiziere den Client, dass er den empfangenen Text (der Inhalt der Batchdateien) in eine Datei schreibt und diese mit der Process-Klasse ausführt.

    Ein Client kann dann das Ergebnis seines Durchlaufs an den Server zurückgeben und dieser kann das auf Wunsch allen anderen Clients mitteilen.

    Wie kann ich mir das vorstellen? Ein kleines VB-Programm auf jeder VM, welche nur auf einem Port horcht und ggf. die Batch startet?
    gemeint war eine kleine .Net-Anwendung auf jedem Client (VM), die eine TCP-Verbingung zu einem Server (auch von dir entwickelt) offen hat. Der Server kann über diese Verbindung eine Batchdatei an den Client übermitteln und der Client kann dem Server Rückmeldung erstatten.

    Um das umzusetzen, kannst du beispielsweise einen TCP-Chat modifizieren. Beispielcodes, die dir ein Grundverständnis für derartige Verbindungen vermitteln können findes du im Sourcecode-Austausch:
    [VB.NET] TCP Server und Client Komplettlösung
    [VB.NET] Multiserver (TCP)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FuFu^^“ ()

    Soooo bin schon mal um einiges weiter :)
    das eine Beispiel TPC-Charprojekt ist ja vollgerammelt mit Try-Catches, da bin ich glaube ich noch sehr sehr harmlos mit meinen 3-4 in meinem gesamten Projekt ;)

    Was funktioniert: An- und Abmelden von VMs am TCP-Server, welcher im Hauptprogramm auf dem eigenen Rechner läuft. Erkennung, welche VM sich an- und abmeldet.
    --> momentanes Problem: Kann ich vom Server aus direkt an eine bestimmte VM per TCP mehrere Wörter schicken? Und das außerhalb des Client-Server-Threads (vom Hauptthread aus)? Ich weiß nämlich nicht, wie ich die ganzen Variablen in den anderen Thread bekommen soll, nur um sie zu verschicken ;)

    Thx schonmal, super hilfe!
    liege ich bei den Thread Datenslots richtig? Die Seite ist ja schon etwas länger ;)

    Ziel ist einfach nur: vier Variablen übergeben, (u.a. Empfänger), welche vom entsprechenden Thread an den Empfänger weitergeleitet werden. -> Daher noch eine andere Frage: Ist das so direkt einfach möglich? Da ich momentan ja für jeden Empfänger einen einzelnen Thread habe (welcher genau das ist, ist dem Hauptprogramm/Hauptthread denke ich mal gänzlich unbekannt)

    stevez schrieb:

    das eine Beispiel TPC-Charprojekt ist ja vollgerammelt mit Try-Catches, da bin ich glaube ich noch sehr sehr harmlos mit meinen 3-4 in meinem gesamten Projekt
    Wenn du ein leidlich sauber geproggtes TCP-Sample suchst, gugge vlt. auch VersuchsChat
    /eigenlob stink stink
    wofür sich damit rumquälen wenn es auch einfacher geht :)
    *hust* webservice *hust* soap *hust* standalone *hust* *hust*

    System.ServiceModel.ServiceHost
    also ich empfand das als sehr einfach :) es ist eines der Samples in dem paket hier: microsoft.com/en-us/download/details.aspx?id=21459

    da ich gerade den link im der msdn lib nicht mehr finde (die code blöcke sind schwer merkwürdig - is das bei euch auch so?) post ich ein kleines Sample (aber es ist in C# ...)

    > WSServer.exe ausführen
    > Browser öffnen -> localhost:8000/SampleWS
    1. alternative: mit SoapUI die WSDL konsumieren
    2. alternative: sofern ihr das paket installiert habe
    "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe" -> öffnen und "Datei" "Dienst hinzufügen"

    ----------
    Edit:
    Na Teile habe ich doch noch gefunden, zumindest für den service: msdn.microsoft.com/en-us/library/ms751519.aspx
    ggf. muss aber die app.config noch angepasst werden und für den server (damit man kein IIS brauch) wie im anderen post erwähnt:
    msdn.microsoft.com/de-de/libra…icemodel.servicehost.aspx
    gaaaaaaaaaannnnzzz unten :)


    PS: hoffe das stört nicht das es unkommentiert ist - wenn doch kann i das gern ändern

    ----------
    Edit 2:
    ups was mir gerade auffällt - bei meinem gehuste oben habe ich doch glatt vergessen WCF mit rein zuhusten <.<
    kein wunder das man es nicht versteht :( sorry
    Dateien

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „slice“ ()

    Das sieht natürlich auch sehr vielversprechend aus ;) nur jetzt hab ich mir schon meinen Client & Server zurechtgeschrieben - funktioniert einwandfrei.

    Das Problem, Variablen an einen anderen Thread zu übergeben, bzw. vom Hauptthread des Hauptprogrammes (am Besten an einen bestimmten Client) eine Message zu schicken, bleibt leider noch bestehen.
    Edit:

    Ich hab es jetzt hin bekommen -> ich sende vom Server aus eine Message an den bestimmten Client, welcher diese dann interpretiert und entsprechend Funktionen ausführt!

    Nur habe ich jetzt ein für mich unverständliches Problem mit dem Schreiben von zwei temporären Textdateien. Aus der Fehlermeldung werde ich auch nicht schlau (siehe Anhang)... Schreibrechte sind auf jeden Fall vorhanden, alle Variablen passen, man kann auch nicht z.B. C:\a.txt erstellen...

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function writeTXT(ByVal Auswahlname As String, ByVal AwInhalt() As String, ByVal Testfallversion As String, ByVal uebergabezeit As String) As Boolean
    2. Dim _fiSuite As New FileInfo(System.IO.Path.GetTempPath & "tmp_suite_" & uebergabezeit & ".txt")
    3. Dim _fiUebergabe As New FileInfo(System.IO.Path.GetTempPath & "tmp_uebergabe_" & uebergabezeit & ".txt")
    4. Try
    5. Using wr = New StreamWriter(_fiSuite.Open(FileMode.Create))
    6. wr.WriteLine(AwInhalt)
    7. For Each AwInhaltSuite As String In AwInhalt
    8. wr.WriteLine(AwInhaltSuite)
    9. Next
    10. wr.Close()
    11. End Using
    12. Using wr2 = New StreamWriter(_fiUebergabe.Open(FileMode.Create))
    13. wr2.WriteLine(Auswahlname)
    14. wr2.WriteLine(Testfallversion)
    15. wr2.Close()
    16. End Using
    17. Return True
    18. Catch ex As Exception
    19. Select Case MsgBox(String.Format("Der Testdurchlauf wird abgebrochen, da die temporären Dateien{0}{1}{0}{2}{0}nicht beschrieben werden konnten. {0}{0}Fehlermeldung: {3}", _
    20. vbNewLine, _
    21. _fiSuite, _
    22. _fiUebergabe, _
    23. ex.ToString), _
    24. MsgBoxStyle.Exclamation Or MsgBoxStyle.RetryCancel Or MsgBoxStyle.DefaultButton1, _
    25. "Fehler")
    26. Case MsgBoxResult.Retry : If writeTXT(Auswahlname, AwInhalt, Testfallversion, uebergabezeit) Then Return True
    27. Case MsgBoxResult.Cancel : Return False
    28. End Select
    29. Return False
    30. End Try
    31. End Function
    Bilder
    • ScreenShot001.jpg

      152,5 kB, 799×708, 163 mal angesehen