http://dieseyer.de • all rights reserved • © 2011 v11.4

'*** v9.5 *** www.dieseyer.de ******************************
'
' Datei: trace32log.vbs
' Autor: dieseyer@gmx.de
' Auf: www.dieseyer.de
'
' Im Gegensatz zu "logdatei.vbs", die 'nur' (Beispiel-)
' Prozeduren für den Einsatz in VBS-Dateien enthalten, kann
' dieses Skript z.B. aus Batch-Skripten heraus aufgerufen
' werden - Bacht-Skripte selbst können nur sehr umständlich
' 'schöne' LOG-Dateien für trace32.exe schreiben.
'
' trace32log.vbs erwartet drei Parameter
' 1. ErrType:
' 0 - löscht die LOG-Datei und erstellt eine neue
' 1 - normal (weißer Hintergrund)
' 2 - Zeile mit gelben Hintergrund
' 3 - Zeile mit rotem Hintergrund
' 2. LogDatei: In diese wird der Eintrag vorgenommen; dieser
' Parameter muss von " (Anführungszeichen) umschlossen sein.
' 3. LogTxt: Die Zeichenkette (mit Leerschritten) nach dem
' letzten " wird als Text in die LOG-datei geschrieben.
'
' trace32log.vbs - Aufruf aus einer Batch:
' trace32log.vbs 0 "c:\temp\bsp.log" neue LOG-Datei
' trace32log.vbs 1 "c:\temp\bsp.log" normaler LOG-Eintrag
' start trace32log.vbs 3 "%~dpn0.log" ein roter LOG-Eintrag
' trace32log.vbs 2 "%~dpn0.log" ein gelber LOG-Eintrag
' trace32log.vbs 3 "%~dpn0.log" 12 :: ein "roter" LOG-Eintrag
'
' Aus einer Batch heraus ergibt "%~dpn0.log"
' d - Laufwerksbuchstabe mit Doppelpunkt (Drvive; hier "C:")
' p - Pfad (Path; hier "\tst\"")
' n - Dateiname (Name; hier "xx")
' x - Erweiterung mit Punkt (eXtension; hier ".cmd")
' 0 - bezieht sich auf die aktuelle Datei (c:\tst\xx.cmd)
' "c:\tst\xx.cmd" => "c:\tst\xx.log"
' "\\srv1\Share9\bsp\1.cmd" =>"\\srv1\Share9\bsp\1.log"
'
' trace32.exe stammt aus
' http://support.microsoft.com/kb/272436
' http://www.microsoft.com/technet/sms/20/downloads/tools/sp2_tools_help.mspx
' zeigt sehr lange LOG-Einträge (einer Zeile) in einem
' (Status-) Fenster und in der Statuszeile die Dauer vom
' Start der LOG-Datei bis zur aktuellen LOG-Zeile.
'
' Die Zeilennummerm (z.B. "038 :: " für LOG-Dateien können
' komfortabel mit
' http://dieseyer.de/scr-html/sendenan-sicherung.html
' angepasst werden.
'
'***********************************************************

Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl

Dim oArgs : Set oArgs = Wscript.Arguments
Dim LgErr, LogDatei, LgText, i

For i = 0 to oArgs.Count - 1 ' hole alle Argumente
' MsgBox oArgs.item(i), , i
if i = 0 then LgErr = oArgs.item(i)
if i = 1 then LogDatei = oArgs.item(i)
if i = 2 then LgText = LgText & oArgs.item(i)
if i > 2 then LgText = LgText & " " & oArgs.item(i)
Next

' MsgBox "LgErr:" & vbTab & vbTab & LgErr & vbCRLF & "LogDatei: " & vbTab & LogDatei & vbCRLF & "LgText:" & vbTab & vbTab & LgText, , "058 :: "

Call Trace32Log( LgText, LgErr )

WScript.Quit


'*** v9.C *** www.dieseyer.de ******************************
Sub Trace32Log( LogTxt, ErrType )
'***********************************************************
' in VBS und HTA verwendbar
' Aufbau einer LOG-Datei für trace32.exe ( SMS Trace;
' ALLES in einer Zeile!):
' <![LOG[...]LOG]!>
' <
' time="08:12:54.309+-60"
' date="03-14-2008"
' component="SrcUpdateMgr"
' context=""
' type="0"
' thread="1812"
' file="productpackage.cpp:97"
' >
'
' "context=" Info wird nicht angezeigt
' type="0" normale Zeie => NEUE LOG-DATEI - ggf. alte überschreiben !!!!!!!!!!!!
' type="1" normale Zeie
' type="2" gelbe Zeie
' type="3" rote Zeie
' type="F" rote Zeie

' "thread=" kann eine Dezimalzahl aufnehmen; trace32 zeigt
' neben der Dezimalzahl in Klammern die entspr.
' Hexadezimalzahl an - z.B. "33 (0x21)"
' "file=" wird in "Source:" angezeigt
'

Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim LogDateiX, TitelX, Tst, Nr

On Error Resume Next
Tst = KeineLog
On Error Goto 0
If UCase( Tst ) = "JA" Then Exit Sub

On Error Resume Next
TitelX = Titel ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde
TitelX = title ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde
If Len( TitelX ) < 2 Then TitelX = document.title ' .hta
If Len( TitelX ) < 2 Then TitelX = WScript.ScriptName ' .vbs
On Error Goto 0

On Error Resume Next
LogDateiX = LogDatei ' wurde die Variable 'LogDatei' nicht außerhalb der Prozedur definiert
If Len( LogDateiX ) < 2 Then LogDateiX = WScript.ScriptFullName & ".log" ' .vbs
If Len( LogDateiX ) < 2 Then LogDateiX = TitelX & ".log" ' .hta
On Error Goto 0

Nr = 0 ' Wenn in Thread die Zeilennummer stehen soll:
Nr = 999999
If Nr = 0 AND InStr( LogTxt, " :" & ": " ) > 0 Then
' Wenn in Thread die Zeilennummer stehen soll - Voraussetzung
' ist eine ZeilenNr. im Format '22 :: '
Nr = LogTxt
Nr = Mid( Nr, 1, InStrRev( Nr, " :" & ": " ) -1 ) ' nach der Zeilennummer
Nr = Mid( Nr, InStrRev( Nr, " " ) + 1 ) ' vor der Zeilennummer
On Error Resume Next : Tst = Int( Nr ) : On Error Goto 0 ' Zeilennummer als (Integer) Zahl
Do ' Tst für Vergleich auf gleiche Länge wie Nr anpassen
If Len( Tst ) = Len( Nr ) Then Exit Do
Tst = "0" & Tst
Loop

If "x" & Tst = "x" & Nr Then
LogTxt = Replace( LogTxt, Tst & " :" & ": ", "" )
Nr = Int( Nr )
End If
End If
If Nr = 999999 Then Nr = 0


' Zwei Nachkommastellen (nach Sekunden) der aktuellen Zeit
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tst = Timer() ' timer() in USA: 1234.22
Tst = Replace( Tst, "," , ".") ' timer() in Deutschland: 123454,12
If InStr( Tst, "." ) = 0 Then Tst = Tst & ".000"
Tst = Mid( Tst, InStr( Tst, "." ), 4 )
If Len( Tst ) < 3 Then Tst = Tst & "0"

' Zeitzone ermitteln - neu (v9.C) und immer richtig(er)
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim AktDMTF : Set AktDMTF = CreateObject("WbemScripting.SWbemDateTime")
AktDMTF.SetVarDate Now(), True : Tst = Tst & Mid( AktDMTF, 22 ) ' : MsgBox Tst, , "205 :: "
' MsgBox "AktDMTF: '" & AktDMTF & "'", , "206 :: "
Set AktDMTF = nothing

LogTxt = "<![LOG[" & LogTxt & "]LOG]!>"
LogTxt = LogTxt & "<"
LogTxt = LogTxt & "time=""" & Hour( Time() ) & ":" & Minute( Time() ) & ":" & Second( Time() ) & Tst & """ "
LogTxt = LogTxt & "date=""" & Month( Date() ) & "-" & Day( Date() ) & "-" & Year( Date() ) & """ "
LogTxt = LogTxt & "component=""" & TitelX & """ "
LogTxt = LogTxt & "context="""" "
LogTxt = LogTxt & "type=""" & ErrType & """ "
LogTxt = LogTxt & "thread=""" & Nr & """ "
LogTxt = LogTxt & "file=""dieseyer.de"" "
LogTxt = LogTxt & ">"

Tst = 8 ' LOG-Datei erweitern
If ErrType = 0 Then Tst = 2 ' LOG-Datei erneuern (alte löschen, neue erstellen)

On Error Resume Next
If LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt )
If not LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt )
On Error Goto 0

Set fso = Nothing

End Sub ' Trace32Log( LogTxt, ErrType )


'*** v3.9 *** www.dieseyer.de ******************************
Sub LogText( LogTxt )
'***********************************************************
WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile( WScript.ScriptName & ".log", 8, true ).WriteLine ( LogTxt )
End Sub ' LogText( LogTxt )

http://dieseyer.de • all rights reserved • © 2011 v11.4