CMD Befehl ausführen und Rückgabe einem string zuweisen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    CMD Befehl ausführen und Rückgabe einem string zuweisen

    Hey,

    ich suche nach einer möglichkeit ein CMD Befehl in VB auszuführen, und die rückgabe dieses Befehls in einen string zu speichern.

    ich weiß das ich mit "Process.start(...)" auch CMD befehle ausführen kann, ich möchte aber umbedingt den rückgabe wert ermitteln.

    jemand ne ahnung wie ich das angehen könnte?
    Neue Instanz der
    Process-Klasse: msdn.microsoft.com/de-de/libra…ess_members(v=vs.80).aspx
    mit einer ProcessStartInfo: msdn.microsoft.com/de-de/libra…nfo_members(v=VS.80).aspx
    welche "RedirectStandardOutput" auf true hat.

    Dann kannst du dir von deiner Process-Instanz einen Outputstream holen. (Property heißt "StandardOutput")

    Funktioniert nur bei Konsolenanwendungen.

    Wenn das nicht hilft, einfach mal nach den Schlüsselwörtern googlen.


    Thema als "Erledigt" kennzeichnen nicht vergessen, wenn die Lsung gefunden wurde.
    Von meinem iPhone gesendet
    RedirectStandardOutput auf True und guck dir die Events der Process-Klasse an OutputReceived-Event sollte dir helfen, oder wenn du es gerne über einen StreamReader machst mit der StandardOutput Eigenschaft...
    Sollte etwas nicht funktionieren, oder du es nicht hinbekommen such nach den entsprechend oben genannten Begriffen und du wirst fündig werden...

    Das regt auf, so viel umsonst geschrieben...xD

    Aber damit ich das doch noch posten kann:
    Das funktioniert auch bei WinForms Anwendungen, soferne die etwas in diesen Stream schreiben(bei .net Console.Write... in C z.B. in stdout)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hi

    ich versuche auch gerade ein cmd abfrage zu realisieren und dann die rückgabe in einen string zu speichern um ihn später vergleichen zu können

    momentan sieht mein code so aus

    Quellcode

    1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    2. Dim myprocess As New ProcessStartInfo("cmd.exe")
    3. myprocess.Arguments = "/k blablablub"
    4. myprocess.WindowStyle = ProcessWindowStyle.Normal
    5. Process.Start(myprocess)
    6. End Sub

    wenn ich den befehl ausführe bekomme ich von meiner cmd einen status zurück der entweder Online oder Offline ist, wie komme ich jetzt an den String (offline bzw. online) ran?
    Man tippe die Stichworte die dir gegeben wurden in Google ein und erhält als erste Seite gute Informationen sogar mit SourceCode:
    msdn.microsoft.com/de-de/library/bb979134.aspx
    Oder über mein erstgenanntes Stichwort "OutputReceived":
    msdn.microsoft.com/en-us/libra…s.outputdatareceived.aspx
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    okay darauf bin ich auch schon gestoßen bei meiner suche, nur ich muss leider sagen ich habe bis jetzt hauptsächlich php programmiert und besäftige mich nun in Vorbereitung auf meine Studium mit VB d.h ich mache VB erst seit ca. einer Woche

    Könnte mir deshalb jemand mal einen kleinen Lösungsansatz geben :rolleyes:
    Inwiefern? Die nächste Stufe wäre entweder ein komplettes Projekt hochzuladen, oder TeamViewer anzuschmeißen und auf deinem Bildschirm rum zu tippen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    naja in sofern das man das eveutell in meinen vorhanden code einpfelgt:)

    aber ich denke mal ich werde gleich, wenn ich von schicht komme, zuhause nochmal den pc anwerfen mir das ganze was auf deinen links steht einverleiben


    So ich habe das ganze mal so gemacht, funktioniert auch alles soweit :)

    Quellcode

    1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    2. Dim myprocess As System.Diagnostics.Process _
    3. = New System.Diagnostics.Process()
    4. With myprocess.StartInfo
    5. .FileName = ("cmd.exe")
    6. .Arguments = "/c blabla"
    7. .RedirectStandardInput = True
    8. .RedirectStandardOutput = True
    9. .RedirectStandardError = True
    10. .UseShellExecute = False
    11. End With
    12. myprocess.Start()
    13. Dim StdOut As System.IO.StreamReader = myprocess.StandardOutput
    14. If StdOut.ReadLine() = "online" Then
    15. Label1.Text = "Ja es geht!"
    16. Else
    17. Label1.Text = "Nein es geht nicht:("
    18. End If
    19. End Sub

    eine kleine frage hätte ich dann doch noch was passiert wenn er mir jetzt nicht einen Zeile auswirft sondern 2 Zeilen zurückgibt
    z.B
    Ausgabe 1:
    online
    Ausgabe 2:
    warte auf Verbindung
    online

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ronny130286“ ()

    Hallo,

    entschuldigt, dass ich diesen alten Beitrag hervorhole. Aber bei mir funktionierte der oben gepostete Code so nicht. Ich musste noch einen TAG hinzufügen: .CreateNoWindow = True

    Der Aufruf von "node.exe -v" übergibt in der Eingabeaufforderung die Versionsnummer (z.B. "4.4.4.4").
    Mit folgendem Code lese ich den Rückgabewert erforlgreich aus:

    VB.NET-Quellcode

    1. Public Function GetNodeVersion() As String
    2. Try
    3. Dim myprocess As System.Diagnostics.Process = New System.Diagnostics.Process()
    4. With myprocess.StartInfo
    5. .FileName = ("node.exe")
    6. .CreateNoWindow = True
    7. .Arguments = "-v"
    8. .RedirectStandardInput = True
    9. .RedirectStandardOutput = True
    10. .RedirectStandardError = True
    11. .UseShellExecute = False
    12. End With
    13. myprocess.Start()
    14. Dim StdOut As System.IO.StreamReader = myprocess.StandardOutput
    15. Return StdOut.ReadLine()
    16. Catch
    17. Return "Fehler"
    18. End Try
    19. End Function


    Auf die oben noch unbeantwortete Frage würde ich folgende Antwort geben:

    VB.NET-Quellcode

    1. Return StdOut.ReadToEnd()

    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at