VBS: CLI Output umleiten bzw. auslesen
Hallo zusammen,
ich habe mal wieder eine Frage.
Der Inhalt aus dem Command Line Interface möchte ich gern in eine Datei umleiten oder gar direkt verarbeiten können.
Der Aufruf vom CLI und die Eingaben etc. funkionieren 1A.
Jedoch funktioniert die Umleitung nicht.
Hier hämmert er mich einfach nur die "> output.txt" ins CLI-Fensterchen.
Eine Umleitung mit sendkeys scheint wohl nicht zu funktionieren (oder es muss ein speziellen Operator eingeben?).
Gruß, Sascha
ich habe mal wieder eine Frage.
Der Inhalt aus dem Command Line Interface möchte ich gern in eine Datei umleiten oder gar direkt verarbeiten können.
SET Oracle = CreateObject("WScript.shell")
Oracle.run "cmd",0
Oracle.sendkeys "cd D:\Oracle\product\11.2.0\dbhome_1\OPatch {ENTER}"
Oracle.sendkeys "D: {ENTER}"
Oracle.sendkeys "opatch lsinventory {ENTER}"
Oracle.sendkeys "exit {ENTER}"
Jedoch funktioniert die Umleitung nicht.
SET Oracle = CreateObject("WScript.shell")
Oracle.run "cmd",0
Oracle.sendkeys "cd D:\Oracle\product\11.2.0\dbhome_1\OPatch {ENTER}"
Oracle.sendkeys "D: {ENTER}"
Oracle.sendkeys "opatch lsinventory {ENTER} > output.txt"
Eine Umleitung mit sendkeys scheint wohl nicht zu funktionieren (oder es muss ein speziellen Operator eingeben?).
Gruß, Sascha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 233279
Url: https://administrator.de/contentid/233279
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Sascha,
dafür gibt es eine elegantere Lösung um an StdOut eines Befehls zu kommen:
Grüße Uwe
dafür gibt es eine elegantere Lösung um an StdOut eines Befehls zu kommen:
Beispiel zum Auslesen von StdOut und StdErr einer Befehlszeile
Set objShell = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.Filesystemobject")
'Befehl ausführen
Set oExec = objShell.Exec("cmd /c ping -n 1 localhost")
'Warte darauf das der Befehl beendet wurde
Do While oExec.Status = 0
WScript.Sleep 100
Loop
' StdOut auslesen
out = ""
Do While Not oExec.StdOut.AtEndOfStream
out = out & oExec.StdOut.ReadAll
Loop
'StdErr auslesen
Do While Not oExec.StdErr.AtEndOfStream
out = out & oExec.StdErr.ReadAll
Loop
' Zum Test: Ausgabe anzeigen lassen:
WScript.Echo out
' Ausgabe in Datei schreiben
fso.OpenTextFile("output.txt",2,True).Write(out)
Ach .. das müsste reichen... da hast du es umständlicher gemacht als es eigentlich ist ...
Set objShell = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.Filesystemobject")
Set oExec = objShell.Exec("cmd /c ""D:\Oracle\product\11.2.0\dbhome_1\OPatch\opatch.exe"" lsinventory")
Do While oExec.Status = 0
WScript.Sleep 100
Loop
out = ""
Do While Not oExec.StdOut.AtEndOfStream
out = out & oExec.StdOut.ReadAll
Loop
Do While Not oExec.StdErr.AtEndOfStream
out = out & oExec.StdErr.ReadAll
Loop
WScript.Echo out
fso.OpenTextFile("output.txt",2,True).Write(out)
Zitat von @SaschaRD:
Hättest Du noch einen Vorschlag zum Auslesen von einzelen Zeilen? z.B. OPatch-Version.
Werde es mit ReadLine testen.
Nochmals Danke und Gruß, Sascha
klar kein Problem, das lässt sich mit RegularExpressions einfach machen, werde dir gleich mal ein Beispiel schicken...Hättest Du noch einen Vorschlag zum Auslesen von einzelen Zeilen? z.B. OPatch-Version.
Werde es mit ReadLine testen.
Nochmals Danke und Gruß, Sascha
das hier unter den Code von Oben gesetzt extrahiert dir die OPatch-Version
Set myRegExp = CreateObject("vbscript.regexp")
myRegExp.Pattern = "OPatch-Version\s*:\s*([\d\.]+)"
Set myMatches = myRegExp.Execute(out)
If myMatches.Count > 0 Then
opatch_version = myMatches(0).SubMatches(0)
End If
wscript.echo opatch_version