Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS: CLI Output umleiten bzw. auslesen

Frage Entwicklung VB for Applications

Mitglied: SaschaRD

SaschaRD (Level 1) - Jetzt verbinden

21.03.2014, aktualisiert 15:33 Uhr, 1712 Aufrufe, 6 Kommentare, 4 Danke

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.
01.
	SET Oracle = CreateObject("WScript.shell") 
02.
	Oracle.run "cmd",0 
03.
	Oracle.sendkeys "cd D:\Oracle\product\11.2.0\dbhome_1\OPatch {ENTER}" 
04.
	Oracle.sendkeys "D: {ENTER}" 
05.
	Oracle.sendkeys "opatch lsinventory {ENTER}" 
06.
	Oracle.sendkeys "exit {ENTER}"
Der Aufruf vom CLI und die Eingaben etc. funkionieren 1A.
Jedoch funktioniert die Umleitung nicht.
01.
	SET Oracle = CreateObject("WScript.shell") 
02.
	Oracle.run "cmd",0 
03.
	Oracle.sendkeys "cd D:\Oracle\product\11.2.0\dbhome_1\OPatch {ENTER}" 
04.
	Oracle.sendkeys "D: {ENTER}" 
05.
	Oracle.sendkeys "opatch lsinventory {ENTER} > output.txt"
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
Mitglied: colinardo
21.03.2014, aktualisiert um 13:31 Uhr
Hallo Sascha,
dafür gibt es eine elegantere Lösung um an StdOut eines Befehls zu kommen:
Beispiel zum Auslesen von StdOut und StdErr einer Befehlszeile
01.
Set objShell = CreateObject("Wscript.Shell") 
02.
Set fso = CreateObject("Scripting.Filesystemobject") 
03.
 
04.
'Befehl ausführen 
05.
Set oExec = objShell.Exec("cmd /c ping -n 1 localhost") 
06.
 
07.
'Warte darauf das der Befehl beendet wurde 
08.
Do While oExec.Status = 0 
09.
     WScript.Sleep 100 
10.
Loop 
11.
 
12.
' StdOut auslesen 
13.
out = "" 
14.
Do While Not oExec.StdOut.AtEndOfStream 
15.
   out = out & oExec.StdOut.ReadAll 
16.
Loop 
17.
 
18.
'StdErr auslesen 
19.
Do While Not oExec.StdErr.AtEndOfStream 
20.
   out = out & oExec.StdErr.ReadAll 
21.
Loop 
22.
 
23.
' Zum Test: Ausgabe anzeigen lassen: 
24.
WScript.Echo out 
25.
 
26.
' Ausgabe in Datei schreiben 
27.
fso.OpenTextFile("output.txt",2,True).Write(out)
Grüße Uwe
Bitte warten ..
Mitglied: SaschaRD
21.03.2014 um 14:22 Uhr
Hallo Uwe,

danke für deine Antwort.

Habe soeben deinen Code verwendet und für meine Zwecke umgebaut. Leider nimmt er den Output den LSInventory in die CLI postet nicht.
Wird LSInventory aufgerufen kommt folgenden Output
01.
D:\Oracle\product\11.2.0\dbhome_1\OPatch>opatch lsinventory 
02.
Invoking OPatch 11.1.0.6.6 
03.
 
04.
Oracle Interim Patch-Installationsprogramm Version 11.1.0.6.6 
05.
Copyright (c) 2009, Oracle Corporation. All rights reserved. Alle Rechte vorbehalten. 
06.
 
07.
 
08.
Oracle-Standardverzeichnis       : D:\Oracle\product\11.2.0\dbhome_1 
09.
Zentrales Bestandsverzeichnis: C:\Program Files\Oracle\Inventory 
10.
   von           : n/a 
11.
OPatch-Version    : 11.1.0.6.6 
12.
OUI-Version       : 11.2.0.1.0 
13.
OUI-Speicherort      : D:\Oracle\product\11.2.0\dbhome_1\oui 
14.
Speicherort von Log-Datei: D:\Oracle\product\11.2.0\dbhome_1\cfgtoollogs\opatch\opatch2014-03-21_14- 
15.
14-34PM.log 
16.
 
17.
Patch history file: D:\Oracle\product\11.2.0\dbhome_1\cfgtoollogs\opatch\opatch_history.txt 
18.
 
19.
Lsinventory Output file location : D:\Oracle\product\11.2.0\dbhome_1\cfgtoollogs\opatch\lsinv\lsinve 
20.
ntory2014-03-21_14-14-34PM.txt 
21.
 
22.
-------------------------------------------------------------------------------- 
23.
Installierte Produkte der obersten Ebene (1): 
24.
 
25.
Oracle Database 11g                                                  11.2.0.1.0 
26.
In diesem Oracle-Standardverzeichnis sind 1 Produkte installiert. 
27.
 
28.
 
29.
In diesem Oracle-Standardverzeichnis sind keine Interim-Patches installiert. 
30.
 
31.
 
32.
-------------------------------------------------------------------------------- 
33.
 
34.
OPatch succeeded.
Dieser Output ist für mich wichtig.

In der Datei steht zurzeit nur
01.
Microsoft Windows [Version 6.1.7601] 
02.
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. 
03.
 
04.
c:\Skripte>
Mit "ReadAll" wird der gesamte Inhalt gelesen und mit "ReadLine" sind einzele Zeilen auslesbar? ggf. werde ich es später auf einzelne Zeilen beschränken (OPatch-Version) ist z.B. wichtig.

Gruß, Sascha
Bitte warten ..
Mitglied: colinardo
21.03.2014, aktualisiert um 15:10 Uhr
Obiges Script gibt nur das zurück was von diesem Befehl zurückgeben wird
Set oExec = objShell.Exec("cmd /c ping -n 1 localhost") 
Bitte warten ..
Mitglied: colinardo
LÖSUNG 21.03.2014, aktualisiert um 15:33 Uhr
Ach .. das müsste reichen... da hast du es umständlicher gemacht als es eigentlich ist ...
01.
Set objShell = CreateObject("Wscript.Shell") 
02.
Set fso = CreateObject("Scripting.Filesystemobject") 
03.
Set oExec = objShell.Exec("cmd /c ""D:\Oracle\product\11.2.0\dbhome_1\OPatch\opatch.exe"" lsinventory")  
04.
Do While oExec.Status = 0 
05.
     WScript.Sleep 100 
06.
Loop 
07.
out = "" 
08.
Do While Not oExec.StdOut.AtEndOfStream 
09.
   out = out & oExec.StdOut.ReadAll 
10.
Loop 
11.
Do While Not oExec.StdErr.AtEndOfStream 
12.
   out = out & oExec.StdErr.ReadAll 
13.
Loop 
14.
WScript.Echo out 
15.
fso.OpenTextFile("output.txt",2,True).Write(out)
Bitte warten ..
Mitglied: SaschaRD
21.03.2014 um 15:20 Uhr
Hallo Uwe,

wie immer erste Sahne. Vielen Dank.
01.
SET objShell = CreateObject("WScript.Shell") 
02.
SET objFSO = CreateObject("Scripting.Filesystemobject") 
03.
SET objExec = objShell.Exec("cmd /c ""D:\Oracle\product\11.2.0\dbhome_1\OPatch\opatch.bat"" lsinventory")  
04.
	DO WHILE objExec.Status = 0 
05.
		WScript.Sleep 10 
06.
	LOOP 
07.
		out = "" 
08.
		DO WHILE NOT objExec.StdOut.AtEndOfStream 
09.
		out = out & objExec.StdOut.ReadAll 
10.
		LOOP 
11.
			DO WHILE NOT objExec.StdErr.AtEndOfStream 
12.
			out = out & objExec.StdErr.ReadAll 
13.
			LOOP 
14.
			objFSO.OpenTextFile("output.txt",2,True).Write(out)
So läuft der Hase!

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
Bitte warten ..
Mitglied: colinardo
LÖSUNG 21.03.2014, aktualisiert 25.03.2014
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...

das hier unter den Code von Oben gesetzt extrahiert dir die OPatch-Version
01.
Set myRegExp = CreateObject("vbscript.regexp") 
02.
myRegExp.Pattern = "OPatch-Version\s*:\s*([\d\.]+)" 
03.
Set myMatches = myRegExp.Execute(out) 
04.
If myMatches.Count > 0 Then 
05.
	opatch_version = myMatches(0).SubMatches(0) 
06.
End If 
07.
wscript.echo opatch_version
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Entwicklung
Zählerstände über SNMP und VBS auslesen (4)

Frage von motofuzy zum Thema Entwicklung ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...