albertminrich
Goto Top

Objshell.exec ohne öffnende Eingabeaufforderung

Hallo,

eine Frage zu vbs
Folgender Code:

Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping 192.168.2.1")
wscript.echo objExec.StdOut.readall

Funktioniert zwar, aber so lange der ping-Befehl läuft, öffnet sich eine Eingabeaufforderung. Geht das auch ohne?

Bisher hab ichs immer so gemacht:
objExec = objShell.run("%COMSPEC% /c ping 192.168.2.1",0,true)
Da öffnet sich zwar keine Eingabeaufforderung, aber in objExec steht nur der Errorcode des ping-Befehls.
Das heisst, ich muss die Ausgabe des pings in eine Datei umleiten und diese wieder auslesen. Geht, aber eleganter wärs mit der ersten Variante.
Nur halt ohne Eingabeaufforderung. Wie bekommt man die weg?

Danke
Martin

Content-Key: 131267

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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: TsukiSan
TsukiSan 09.12.2009 um 07:24:45 Uhr
Goto Top
Hallo AlbertMinrich,

eine Möglichkeit:
Lege dir eine Batchdatei an in welche du folgende Zeile schreibst:
Wscript.Echo C:\MeinScript.vbs
(natürlich den Pfad und Dateinamen anpassen!)
Dann erstellst du dir einen Link von deiner Batchdatei und mit rechter Maustaste klickst du auf selbigen und stellst unter Eigenschaften "Ausführen" --> "minimiert" ein.
Dann erscheint zwar immer noch das Ausgabefenster, allerdings in der Taskleiste und wird so erst mal nicht nervend sein.

Gruss
Tsuki
Mitglied: TsukiSan
TsukiSan 09.12.2009 um 07:33:08 Uhr
Goto Top
oder so:
strMachines = "192.168.0.1;192.168.0.2;192.168.0.3;192.168.0.4;192.168.0.5"  
aMachines = split(strMachines, ";")  
 
For Each machine in aMachines
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
        ExecQuery("select * from Win32_PingStatus where address = '"_  
            & machine & "'")  
    For Each objStatus in objPing
        If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then 
            WScript.Echo("Computer " & machine & " is not reachable")   
        Else
	    WScript.Echo("Computer " & machine & " is reachable")  
        End If
    Next
Next
Dann aber die Adressen (in Zeile 1) festlegen und deine Aktionen in die IFs einfügen.

Gruss
Tsuki
Mitglied: AlbertMinrich
AlbertMinrich 09.12.2009 um 11:17:22 Uhr
Goto Top
@TsukiSan
es soll schon komplett ohne Fenster laufen, auch nicht minimiert.
es geht mir auch nicht ums pingen, sondern allgemein um die Ausführung von Dos-Befehlen.
Mitglied: TsukiSan
TsukiSan 09.12.2009 um 14:38:11 Uhr
Goto Top
Na Tipp Nr.2 läuft ganz ohne Fenster.
Jetzt verstehe ich deine Frage nicht??
Mitglied: AlbertMinrich
AlbertMinrich 09.12.2009 um 16:47:58 Uhr
Goto Top
aber das ist eine Lösung nur fürs pingen. Es geht mir aber generell um die Ausführung von Dos-Befehlen (dir, tasklist...)
Mitglied: TsukiSan
TsukiSan 10.12.2009 um 02:41:57 Uhr
Goto Top
Na , dann haben wir eine kleine Situation.

Möglichkeit A
Ich bin nicht in der Lage, deine Frage zu verstehen
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping 192.168.2.1")
wscript.echo objExec.StdOut.readall

Funktioniert zwar, aber so lange der ping-Befehl läuft, öffnet sich eine Eingabeaufforderung. Geht das auch ohne?

Möglichkeit B
Du bist nicht in der Lage, deine Gedanken in Worte zu fassen, in Form einer allgemein verständlichen Frage.

Da ich den Fehler aber erstmal immer bei mir suche, ziehe ich Möglichkeit A stark in betracht.

Ich lehne mich ganz entspannt zusammen mit dir zurück und wir folgen mal den nützlichen Tipps der vielen "Frage-Versteher". Dabei kann auch ich wieder etwas dazulernen.

aber das ist eine Lösung nur fürs pingen. Es geht mir aber generell um die Ausführung von Dos-Befehlen (dir, tasklist...)
Lernen wir heute mal, wie VBS und DOS zusammenarbeiten.

In geduldiger Pose,
Tsuki
Mitglied: AlbertMinrich
AlbertMinrich 10.12.2009 um 11:33:33 Uhr
Goto Top
Das hier:
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping 192.168.2.1")
wscript.echo objExec.StdOut.readall

war nur ein Beispiel.
Das funktioniert mit deiner Lösung einwandfrei.
Ich will aber nicht nur pingen, sondern vielleicht auch mal das hier machen:
Set objExec = objShell.Exec("dir c:\")
Dafür ist aber deine Lösung nicht geeignet, oder seh ich das falsch?

Ich weiss nicht, was du mir damit sagen willst:
"Lernen wir heute mal, wie VBS und DOS zusammenarbeiten"

Ich weiss, wie man aus einer batch ein vb-Script startet und auch andersrum.
Ersteres will ich nicht. Das Hauptscript muss ein vb-Script sein. Daraus will ich beliebige DOS-Befehle ausführen, ohne dass sich eine Eingabeaufforderung öffnet und ohne Umleitung des DOS-Befehls in eine Datei, die ich dann erst wieder auslesen müsste.

Vielleicht kommen wir ja noch zusammen ;)