Top-Themen

Aktuelle Themen (A bis Z)

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, 1857 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 ..
Ähnliche Inhalte
VB for Applications
VBS - Vor- und Nachnamen auslesen
Frage von Ah3n0bar6usVB for Applications2 Kommentare

Ich könnte noch einmal (teuren) Rat gebracuhen. Ich versuche mir dem u.a. Script den kompletten Namen eines Nutzers vom ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen
Frage von joni2000deBatch & Shell4 Kommentare

Hallo zusammen, ich lese mit folgendem Code das Eventlog aus um die Druckjobs zu ermitteln. Das funktioniert auf dem ...

Entwicklung
Zählerstände über SNMP und VBS auslesen
Frage von motofuzyEntwicklung4 Kommentare

Hallo ihr lieben, ich suche ein Script das in VBS oder Powershell geschrieben ist und mir die Zählerstände der ...

VB for Applications
CSV Datei mit VBS auslesen
Frage von scorpionesc83VB for Applications4 Kommentare

Hallo zusammen, ich bin in Sachen VBS ein totaler Anfänger und hoffe, dass ihr mir bei einem Problem helfen ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 6 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 8 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...