azubi1452
Goto Top

VBS For Each Schleife in vorhandenen Code einfügen -

Hallo zusammen,

ich habe hier ein Skript welches auf einem Remote-Server das EreignisLog checkt und mir dann eine Mail schickt mit allen Errormeldungen in den Bereichen "System" und "Anwendung". Soweit klappt dies auch.

Nun möchte ich aber mit dem selben Skript mehrere Server auf einmal checken so, dass ich eine Mail bekomme mit den Errormeldungen von allen Servern.
Ich hänge mal eine Kopie von dem Skript an, als dies noch wenigstens mit einem Server funktionierte. Das Skript indem ich versucht habe die Schleife einzubauen, mute ich euch lieber nicht zu. ^^
Wenn ich das richtig sehe, müssen ja "nur" die beiden For Each Schleifen sowie am Anfang die Tabellen für jeden Server in dem Array dann ausgeführt werden. Ist aber nicht so einfach, wie ich finde...

Zum testen einfach die Daten oben in den Einstellungen anpassen.
Danke im Voraus

Gruß Azubi

Das Skript habe ich übrigens von hier : Zentrale und automatisierte Bereitstellung aller Windows Logfiles

'--------------------------------------------------Einstellungen-------------------------------------------------  
'Gibt die Maximale Anzahl der zurückgelieferten Einträge an  
'Werte für System Log  
maxwert = 50
'Werte für Application Log  
maxwert2 = 25
'gibt an wieviele Tage zurück gegangen werden soll  
zeitsp = 7
'Email Settings  
absender = "absender@test.de"  
mailserver = "IP"  
empfanger = "empfanger@test.de"  

Set oArg = wscript.arguments

strServer = "Server-IP"  



mail = "mail@test.de"  
mail2 = "mail@test.de"  
ifertig = "False"  
i2fertig = "False"  
if isOnline(strServer) Then

strNamespace = "root\cimv2"  
strUser = "domäne\admin" 'domäne\admin  
strPassword = "PW"  
'--------------------------------------------Einstellungen Ende---------------------------------------------------  

Const WbemAuthenticationLevelPktPrivacy = 6


Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set objWMI = objwbemLocator.ConnectServer _
(strServer, strNamespace, strUser, strPassword)
objWMI.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy

Set objInstances = objWMI.ExecQuery ("Select * from Win32_NTLogEvent WHERE Logfile = 'System' and EventType = 1")  
Set objInstances2 = objWMI.ExecQuery ("Select * from Win32_NTLogEvent WHERE Logfile = 'Application' and EventType = 1")  
dim f
Else 
wscript.quit
End if

    mail = "<h1>System :</h1><br><TABLE Border=1>" & chr(13)  
    mail = mail & "<Tr>" & chr(13)  
    mail = mail &   "<TD>Computer</TD>"& chr(13)  
    mail = mail &  "<TD>Ereigniskennung</TD>"& chr(13)  
    mail = mail &   "<TD>Beschreibung</TD>"& chr(13)  
    mail = mail &   "<TD>Quelle </TD>"& chr(13)  
    mail = mail &  "<TD>Datum </TD>"& chr(13)  
    mail = mail &   "</TR>"& chr(13)  
        
    mail2 = "<br><h1>Anwendung:</h1><br><TABLE border=1>" & chr(13)  
    mail2 = mail2 & "<Tr>" & chr(13)  
    mail2 = mail2 &   "<TD>Computer</TD>"& chr(13)  
    mail2 = mail2 &  "<TD>Ereigniskennung</TD>"& chr(13)  
    mail2 = mail2 &   "<TD>Beschreibung</TD>"& chr(13)  
    mail2 = mail2 &   "<TD>Quelle</TD>"& chr(13)  
    mail2 = mail2 &  "<TD>Datum </TD>"& chr(13)  
    mail2 = mail2 &   "</TR>"& chr(13)  

dat = now() - zeitsp
i = 0
i2 = 0

For Each objInstance in objInstances
        dat1 = objInstance.TimeGenerated
        dat1 = dConvertWMItoVBSDate(dat1)
                if i < maxwert and dat1 > dat Then
                        With objInstance            
                        mail = mail &   "<Tr>"& chr(13)  
                        mail = mail &   "<TD>" & .ComputerName & "</TD>"& chr(13)  
                        mail = mail &   "<TD>" & .EventCode & "</TD>"& chr(13)  
                        mail = mail &  "<TD>" & .Message & "</TD>"& chr(13)  
                        mail = mail &   "<TD>" & .SourceName & "</TD>"& chr(13)  
                        mail = mail &   "<TD>" & dConvertWMItoVBSDate(.TimeGenerated) & "</TD>"& chr(13)  
                        mail = mail &   "</TR>"& chr(13)  
                        i = i +1
                        End With
                        On Error Goto 0
                Elseif i > maxwert Then
                        ifertig="True"  
                        exit for
                Elseif dat1 < dat Then
                        ifertig="True"  
                        exit for
                end if
Next

For Each objInstance in objInstances2
  dat1 = objInstance.TimeGenerated
        dat1 = dConvertWMItoVBSDate(dat1)
if i2< maxwert2 and dat1 > dat Then
                    With objInstance           
                        mail2 = mail2 &   "<Tr>"& chr(13)  
                        mail2 = mail2 &   "<TD>" & .ComputerName & "</TD>"& chr(13)  
                        mail2 = mail2 &   "<TD>" & .EventCode & "</TD>"& chr(13)  
                        mail2 = mail2 &   "<TD>" & .Message & "</TD>"& chr(13)  
                        mail2 = mail2 &   "<TD>" & .SourceName & "</TD>"& chr(13)  
                        mail2 = mail2 &   "<TD>" & dConvertWMItoVBSDate(.TimeGenerated) & "</TD>"& chr(13)  
                        mail2 = mail2 & "</TR>" & chr(13)  
                        i2 = i2 +1
                    End With
                        On Error Goto 0
                    elseif i2 > maxwert2 Then
                        i2fertig = "True"  
                        exit for
                    elseif dat1 < dat Then
                        ifertig="True"    
                    exit for                        
                End if
Next

        mail = mail &   "</Table>"& chr(13)  
        mail2 = mail2 &   "</Table>"& chr(13)  
        Set objEmail = CreateObject("CDO.Message")  
        objEmail.From = absender
        objEmail.To = empfanger
        objEmail.Subject = "Ereignisanzeige von:  " & strserver & " - System : " & i & " Anwendung: " & i2  
        objEmail.HTMLbody = "<HTML><Body>" & mail & "<br>" & mail2 & "</body></html>"  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "MAILSERVER"  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25  
        objEmail.Configuration.Fields.Update
        objEmail.Send
wscript.quit

'----------------Schleifenende !--------------------------------------------------  

function IsOnline(host)
set WshShell = CreateObject("Wscript.Shell")  
set temp = wshshell.Exec ("ping.exe -n 1 -w 100 "&host)  
dummy = temp.StdOut.ReadAll
IF instr(1,dummy,"Antwort") >0 THEN  
isonline = true
ELSE
isonline = false
END IF
end Function

Private Function dConvertWMItoVBSDate(sDate)
  Dim sMonth, sDay, sYear, sHour, sMinutes, sSeconds
  sMonth = Mid(sDate,5,2)
  sDay = Mid(sDate,7,2)
  sYear = Mid(sDate,1,4)
  sHour = Mid(sDate,9,2)
  sMinutes = Mid(sDate,11,2)
  sSeconds = Mid(sDate,13,2)
  dConvertWMItoVBSDate = DateSerial (sYear, sMonth, sDay) + TimeSerial (sHour, sMinutes, sSeconds)
End Function

Content-Key: 152587

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: bastla
bastla Oct 07, 2010 at 15:21:43 (UTC)
Goto Top
Hallo Azubi452 und willkommen im Forum!

Rein schematisch (und völlig ungetestet) sollte sich das etwa so machen lassen:
'--------------------------------------------------Einstellungen-------------------------------------------------  
'Gibt die Maximale Anzahl der zurückgelieferten Einträge an  
'Werte für System Log  
maxwert = 50
'Werte für Application Log  
maxwert2 = 25
'gibt an wieviele Tage zurück gegangen werden soll  
zeitsp = 7
'Email Settings  
absender = "absender@test.de"  
mailserver = "IP"  
empfanger = "empfanger@test.de"  

Const WbemAuthenticationLevelPktPrivacy = 6
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
strNamespace = "root\cimv2"  
mail = "mail@test.de"  
mail2 = "mail@test.de"  

Set oArg = wscript.arguments

arrServer = Array("Server1-IP", "Server2-IP", "Server3-IP")  

For Each strServer In arrServer
    ifertig = "False"  
    i2fertig = "False"  

    If isOnline(strServer) Then
        
        strUser = "domäne\admin" 'domäne\admin  
        strPassword = "PW"  
        '--------------------------------------------Einstellungen Ende---------------------------------------------------  

        Set objWMI = objwbemLocator.ConnectServer _
            (strServer, strNamespace, strUser, strPassword)
        objWMI.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy

        Set objInstances = objWMI.ExecQuery ("Select * from Win32_NTLogEvent WHERE Logfile = 'System' and EventType = 1")  
        Set objInstances2 = objWMI.ExecQuery ("Select * from Win32_NTLogEvent WHERE Logfile = 'Application' and EventType = 1")  
        dim f

        mail = "<h1>System :</h1><br><TABLE Border=1>" & chr(13)  
        mail = mail & "<Tr>" & chr(13)  
        mail = mail &   "<TD>Computer</TD>"& chr(13)  
        mail = mail &  "<TD>Ereigniskennung</TD>"& chr(13)  
        mail = mail &   "<TD>Beschreibung</TD>"& chr(13)  
        mail = mail &   "<TD>Quelle </TD>"& chr(13)  
        mail = mail &  "<TD>Datum </TD>"& chr(13)  
        mail = mail &   "</TR>"& chr(13)  
        
        mail2 = "<br><h1>Anwendung:</h1><br><TABLE border=1>" & chr(13)  
        mail2 = mail2 & "<Tr>" & chr(13)  
        mail2 = mail2 &   "<TD>Computer</TD>"& chr(13)  
        mail2 = mail2 &  "<TD>Ereigniskennung</TD>"& chr(13)  
        mail2 = mail2 &   "<TD>Beschreibung</TD>"& chr(13)  
        mail2 = mail2 &   "<TD>Quelle</TD>"& chr(13)  
        mail2 = mail2 &  "<TD>Datum </TD>"& chr(13)  
        mail2 = mail2 &   "</TR>"& chr(13)  

        dat = now() - zeitsp
        i = 0
        i2 = 0

        For Each objInstance in objInstances
            dat1 = objInstance.TimeGenerated
            dat1 = dConvertWMItoVBSDate(dat1)
            if i < maxwert and dat1 > dat Then
                With objInstance            
                    mail = mail &   "<Tr>"& chr(13)  
                    mail = mail &   "<TD>" & .ComputerName & "</TD>"& chr(13)  
                    mail = mail &   "<TD>" & .EventCode & "</TD>"& chr(13)  
                    mail = mail &  "<TD>" & .Message & "</TD>"& chr(13)  
                    mail = mail &   "<TD>" & .SourceName & "</TD>"& chr(13)  
                    mail = mail &   "<TD>" & dConvertWMItoVBSDate(.TimeGenerated) & "</TD>"& chr(13)  
                    mail = mail &   "</TR>"& chr(13)  
                    i = i +1
                End With
                On Error Goto 0
            Elseif i > maxwert Then
                ifertig="True"  
                exit for
            Elseif dat1 < dat Then
                ifertig="True"  
                exit for
            end if
        Next

        For Each objInstance in objInstances2
            dat1 = objInstance.TimeGenerated
            dat1 = dConvertWMItoVBSDate(dat1)
            if i2< maxwert2 and dat1 > dat Then
                With objInstance           
                    mail2 = mail2 &   "<Tr>"& chr(13)  
                    mail2 = mail2 &   "<TD>" & .ComputerName & "</TD>"& chr(13)  
                    mail2 = mail2 &   "<TD>" & .EventCode & "</TD>"& chr(13)  
                    mail2 = mail2 &   "<TD>" & .Message & "</TD>"& chr(13)  
                    mail2 = mail2 &   "<TD>" & .SourceName & "</TD>"& chr(13)  
                    mail2 = mail2 &   "<TD>" & dConvertWMItoVBSDate(.TimeGenerated) & "</TD>"& chr(13)  
                    mail2 = mail2 & "</TR>" & chr(13)  
                    i2 = i2 +1
                End With
                On Error Goto 0
            elseif i2 > maxwert2 Then
                i2fertig = "True"  
                exit for
            elseif dat1 < dat Then
                ifertig="True"    
                exit for                        
            End if
        Next

        mail = mail &   "</Table>"& chr(13)  
        mail2 = mail2 &   "</Table>"& chr(13)  
        Set objEmail = CreateObject("CDO.Message")  
        objEmail.From = absender
        objEmail.To = empfanger
        objEmail.Subject = "Ereignisanzeige von:  " & strserver & " - System : " & i & " Anwendung: " & i2  
        objEmail.HTMLbody = "<HTML><Body>" & mail & "<br>" & mail2 & "</body></html>"  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "MAILSERVER"  
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25  
        objEmail.Configuration.Fields.Update
        objEmail.Send
    End If
Next
'----------------Schleifenende !--------------------------------------------------  

function IsOnline(host)
set WshShell = CreateObject("Wscript.Shell")  
set temp = wshshell.Exec ("ping.exe -n 1 -w 100 "&host)  
dummy = temp.StdOut.ReadAll
IF instr(1,dummy,"Antwort") >0 THEN  
isonline = true
ELSE
isonline = false
END IF
end Function

Private Function dConvertWMItoVBSDate(sDate)
  Dim sMonth, sDay, sYear, sHour, sMinutes, sSeconds
  sMonth = Mid(sDate,5,2)
  sDay = Mid(sDate,7,2)
  sYear = Mid(sDate,1,4)
  sHour = Mid(sDate,9,2)
  sMinutes = Mid(sDate,11,2)
  sSeconds = Mid(sDate,13,2)
  dConvertWMItoVBSDate = DateSerial (sYear, sMonth, sDay) + TimeSerial (sHour, sMinutes, sSeconds)
End Function
Je nachdem, ob es für jeden Server unterschiedliche User / Passwörter geben soll, müsste jeweils ein weiteres Array dafür erstellt werden und die Schleife auf
For s = 0 To UBound(arrServer)
    strServer = arrServer(s)
    strUser = arrUser(s)
    strPW = arrPW(s)
    ....
Next
geändert werden ...

Grüße
bastla
Member: Azubi1452
Azubi1452 Oct 08, 2010 at 09:11:17 (UTC)
Goto Top
Hallo,

danke für dein Beitrag. Klappt prima.

Nun ist es so, dass ich JEWEILS eine Mail pro Server bekomme. Ich möchte aber gerne eine Mail für ALLE Server haben.

Ist ja ganz einfach habe ich mir heute morgen gedacht. Einfach nur den Teil wo die Mail geschickt wird aus der Schleife nehmen, vorher die Daten in eine Varianle schreiben und am Ende dann eine Mail mit der Variable verschicken. Aber irgendwie stehe ich gerade auf dem Schlauch.

Ich habe also am Ende der Schleife die Daten für einen Server ersteinmal zuammen geschrieben in eine Variable:

 
inhaltgesamt = mail & mail2 

Nun muss ich "nurnoch" zu der Variable "inhaltgesamt" zu der anderen "inhaltgesamt"rechnen weil ich ja eine Variable haben möchte für ALLE Server im Array damit ich am Ende nur die eine Variable an die Mail übergeben muss. Also mach ich so:

inhaltgesamtgesamt = inhaltgesamt & inhaltgesamt

Nun sollte die zeile 119 ja so aussehen damit ich eine mail für alle server im array bekomme:
 
objEmail.HTMLbody = "<HTML><Body>" & inhaltgesamtgesamt & "</body></html>"  

Das klappt aber alles nicht so wie ich mir das denke...
hat jemand eine Idee ?

Danke schonmal

Gruß
Azubi
Member: bastla
bastla Oct 08, 2010 at 10:22:30 (UTC)
Goto Top
Hallo Azubi1452!

Besser so:
inhaltgesamt = inhaltgesamt  & mail & mail2
und dann eben
objEmail.HTMLbody = "<HTML><Body>" & inhaltgesamt & "</body></html>"
Grüße
bastla
Mitglied: 76109
76109 Oct 08, 2010 at 14:03:54 (UTC)
Goto Top
Hallo Azubi1452!

Dabei sei vielleicht noch anzumerken, dass:

sich noch die unnötigen Chr(13)-Funktionsaufrufe durch die eine einfache vbCr-Konstante ersetzen ließenface-wink

die Tags: "<HTML><Body>" und "</Body></Html>" genauso unnötig sind, weil der Text ja schon explizit in den objEmail.HtmlBody geschrieben wird. D.h. die Body-Tags sind mit dem ganzen sonstigem Html-Klumpatsch bereits vordefiniertface-wink

Gruß Dieter
Member: Azubi1452
Azubi1452 Oct 25, 2010 at 08:45:32 (UTC)
Goto Top
Hallo zusammen,

danke für euren bisherigen Antworten.
Die reinen Informationen aus dem Eventlog der jeweiligen Server bekomme ich nun per Mail.

Nun möchte ich die Daten übersichtlich in der Mail darstellen.

Bis jetzt läuft es so ab, dass ich eine Mail mit einer HTML-Datei (Eventlog.html) im Anhang bekomme in der dann die Daten aus dem Eventlog stehen. Nun habe ich für die Übersicht ein "Style" mit css innerhalb der Datei geschrieben. Das Funktioniert auch soweit ganz gut.

Als nächstes habe ich zwei Felder (Alle Aufklappen, und Alle zuklappen ) gemeint sind alle Server.

Ich habe dies in einer anderen Test- HTML Datei schon positiv testen können, also das reine Auf- bzw. Zuklappen.

Nur mein Skript ist ja eine VBS-Datei. Dort habe ich, wie mit dem "CSS-Style" den JAVA-Code für die Auf- und Zuklapp- Buttons in eine Variable geschrieben und später einfach mit: Datei.Write Variable in die HTML- Datei (Eventlog.html) geschrieben.

Also wie gesagt der Style funktioniert jedoch der Javacode in meinem Skript nicht, ich sehe zwar die Buttons, jedoch passiert nichts wenn ich drauf klicke. In einer Test-HTML-Datei funktioniert dies jedoch.

Kann es vielleicht sein, dass Java sich nicht in VBS einbetten lässt ? Ich habe per google noch nichts finden können.

Ich hoffe ich habe es verständllich erklärt.

Der JavaCode in der VBS- Datei sieht so aus:

rahmen = rahmen & "<DIV class=HeaderBar>Täglicher Spezialbericht für alle Server der  Farm - generiert am DATUM um UHRZEIT auf SERVER</DIV>"  
rahmen = rahmen & "<body onLoad='hideAll();'>"  
rahmen = rahmen & "<table border='0' width='100%'>"  
rahmen = rahmen & "<DIV class=FooterBar>Erstellt von </DIV>"  
rahmen = rahmen & "<BUTTON onclick='showAll();'>Alle Aufklappen</BUTTON>"  
rahmen = rahmen & "<BUTTON onclick='hideAll();'>Alle Einklappen</BUTTON>"  

java = "<script>"  
java = java & "function refresh() {"  
java = java & "  window.location.reload( true );"  
java = java & "}"  
java = java & "      // HSS0 - HSS18 & HST0 - HST18"  
java = java & "function showAll() {"  
java = java & "  showItem('HSS0', 'HST0');"  
java = java & "  showItem('HSS1', 'HST1');"  
java = java & "}"  
java = java & "function hideAll() {"  
java = java & "  hideItem('HSS0', 'HST0');"  
java = java & "  hideItem('HSS1', 'HST1');"  
java = java & "}"  
java = java & "function showItem( _itemId, _txtId ) {"  
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  thisLevel.style.display = 'block';"  
java = java & "  thisTxt.innerText       = '[-]';"  
java = java & "}"  
java = java & "function hideItem( _itemId, _txtId ) {"   
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  thisLevel.style.display = 'none';"  
java = java & "  thisTxt.innerText       = '[+]';"  
java = java & "}"  
java = java & "function toggleItem( _itemId, _txtId ) {"  
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  if ( thisLevel.style.display == 'none') {"  
java = java & "    thisLevel.style.display = 'block';"  
java = java & "    thisTxt.innerText       = '[-]';"  
java = java & "  }"  
java = java & "  else {"  
java = java & "    thisLevel.style.display = 'none';"  
java = java & "    thisTxt.innerText       = '[+]';"  
java = java & "  }"  
java = java & "}"  
java = java & "</script>"  
Mitglied: 76109
76109 Oct 25, 2010 at 10:12:27 (UTC)
Goto Top
Hallo Azubi1452!

Mit VB-Script würde es in etwa so aussehen:
<input type='button' value='Alle Aufklappen' onClick='ShowAll'>  

Gruß Dieter
Member: Azubi1452
Azubi1452 Oct 25, 2010 at 12:52:08 (UTC)
Goto Top
Hi,

das hat mir leider nicht so wirklich weitergebracht....ich müsste ja so den Quelltext von Java auf vbs umschrieben..und ich denke das ist nicht so einfach, und da ich ja eigentlisch schon alle CodeSchnipsel habe - sie also "nurnoch" zusammenbringen muss und man aus VBScript Java und HTML aufrufen kann, dacht ich mach ich das doch lieber so.

Aber nun mal was anderes....Ich habe eine Idee weshalb der Java-Teil bei mir nicht so richtig will.

Ich habe aus dem JavaCode die "" durch ' ' ersetzt da ich sonst diesen Fehler bekam: Anweisungsende erwartet.
Ich denke mal dies ist mein Fehler. Nun ist nur die Frage was das Gegenstück von Javas Anführungszeichen in VBScript ist ?

Hier mal ein Beispiel von dem Javacode:
So war es vorher und so ist es in der funktionierenden html-Datei
 
function showAll() {
  showItem("HSS0", "HST0");  
  showItem("HSS1", "HST1");  

Und so habe ich es in meinem VBScript umgeschrieben damit ich kein: Aweisungsende Fehler mehr bekomme:
 
function showAll() {
  showItem('HSS0', 'HST0');  
  showItem('HSS1', 'HST1');  
Member: bastla
bastla Oct 25, 2010 at 13:18:33 (UTC)
Goto Top
Hallo Azubi1452!

Um in VBS ein Anführungszeichen als String (oder einen Bestandteil davon) zu verwenden, musst du dieses entweder verdoppeln oder als Chr(34) schreiben:
java = java & "  showItem(""HSS0"", ""HST0"");" 
Grüße
bastla
Member: Azubi1452
Azubi1452 Oct 25, 2010 at 14:55:46 (UTC)
Goto Top
Hallo,

hm..ich habe nun alle ' durch "" erseetzt...funktioniert leider immer noch nicht.
ich habe nun echt keine Ideen mehr...Könnt ihr mal ein Blick auf den relevanten Teil der Skripts werfen ?

Der Rahmen:

rahmen = "<DIV class=HeaderBar>Täglicher Spezialbericht für alle Server der Cloudapps- Farm - generiert am DATUM um UHRZEIT auf SERVER</DIV>"  
rahmen = rahmen & "<body onLoad=""hideAll();"">"  
rahmen = rahmen & "<table border=""0"" width=""100%"">"  
rahmen = rahmen & "<DIV class=FooterBar>Erstellt von </DIV>"  
rahmen = rahmen & "<BUTTON onclick=""showAll();"">Alle Aufklappen</BUTTON>"  
rahmen = rahmen & "<BUTTON onclick=""hideAll();"">Alle Einklappen</BUTTON>"  
'rahmen = rahmen & "<input type='button' value='Alle Aufklappen' onClick='showAll'>"  
'rahmen = rahmen  & "<input type='button' value='Alle Zuklappen' onClick='hideAll'>"  

Serverübersicht:
    servera = servera & "<!-- Erster Server  -->"  
servera = servera & "<td width=100%><p>"  
servera = servera & "<div style=cursor:hand onclick=toggleItem( ""HSS0"", ""HST0"" );>"  
servera = servera & "<div class=HeaderBar><table class=HeaderText border=""0"" width=""97%""><tr>"  
servera = servera & "<td width=""3%"" innerText=""[+]"" id=HST0></td>"  
servera = servera & "<td width=""97%"">" & arrServer(servernummer) & "</td></tr></table></div>"    
servera = servera & "</td></tr></table></div>"  
servera = servera & "</div>"  
servera = servera & "<span style=""display:none;color:blue;"" id=""HSS0"">"  
servera = servera & "<TABLE class=HeaderFrame height=100 cellSpacing=0 cols=3 cellPadding=0 width=""100%"" border=0 align=""left"">"  
servera = servera & "<TBODY>"  
servera = servera & "<TR vAlign=top height=100>"  
servera = servera & "<TD vAlign=top width=""100%"" height=""100"">"  
servera = servera & "<DIV style=""overflow: auto; width: ""100%""; height: 219; valign: top"">"  
servera = servera & "<TABLE cellSpacing=0 cols=4 cellPadding=0 width=""100%"" border=0 height=""100"">"  
servera = servera & "<TR height=25 nowrap>"  
servera = servera & "<TD class=HeaderTitleNoVLine height=""14"" width=""10"">&nbsp;</TD>"  
servera = servera & "<!-- Überschriften unterhalb des Servers  -->"  
servera = servera & "<TD class=HeaderTitle noWrap align=left height=""14"" width=""50%"">System</TD>"  
servera = servera & "<TD class=HeaderTitle noWrap align=left height=""14"">Anwendung</TD>"  
servera = servera & "</TR>"  
servera = servera & "<TR class=AltLight height=22>"  
servera = servera & "<TD class=AltLightNoVline align=middle height=""17"" width=""10""> </TD>"  
servera = servera & "<TD class=AltLight align=right height=""17"" width=""50%"">HTML Text für System</TD>"  
servera = servera & "<TD class=AltLight align=left height=""17"">HTML Text für Anwendung</TD>"  
servera = servera & "</TR></TBODY></TD></DIV></TABLE></TR></TABLE></span>"  

Der Javacode für die beiden Buttons:
java = "<Script Language=JavaScript>"  
java = java & "function refresh() {"  
java = java & "  window.location.reload( true );"  
java = java & "}"  
java = java & "      // HSS0 - HSS18 & HST0 - HST18"  
java = java & "function showAll() {"  
java = java & "  showItem(""HSS0"", ""HST0"");"  
java = java & "  showItem(""HSS1"", ""HST1"");"  
java = java & "}"  
java = java & "function hideAll() {"  
java = java & "  hideItem(""HSS0"", ""HST0"");"  
java = java & "  hideItem(""HSS1"", ""HST1"");"  
java = java & "}"  
java = java & "function showItem( _itemId, _txtId ) {"  
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  thisLevel.style.display = ""block"";"  
java = java & "  thisTxt.innerText       = ""[-]"";"  
java = java & "}"  
java = java & "function hideItem( _itemId, _txtId ) {"   
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  thisLevel.style.display = ""none"";"  
java = java & "  thisTxt.innerText       = ""[+]"";"  
java = java & "}"  
java = java & "function toggleItem( _itemId, _txtId ) {"  
java = java & "  var thisLevel             = document.getElementById( _itemId );"  
java = java & "  var thisTxt               = document.getElementById( _txtId );"  
java = java & "  if ( thisLevel.style.display == ""none"") {"  
java = java & "    thisLevel.style.display = ""block"";"  
java = java & "    thisTxt.innerText       = ""[-]"";"  
java = java & "  }"  
java = java & "  else {"  
java = java & "    thisLevel.style.display = ""none"";"  
java = java & "    thisTxt.innerText       = ""[+]"";"  
java = java & "  }"  
java = java & "}"  
java = java & "</script>"  

Und die Ausgabe:
oZDatei.Write "<HTML>" & head & style & "<Body>" & rahmen & servera & inhaltgesamt & "</body></html>"  

Danke schonmal,

Gruß Azubi
Member: bastla
bastla Oct 25, 2010 at 15:06:00 (UTC)
Goto Top
Hallo Azubi1452!
oZDatei.Write "<HTML>" & head & style & "<Body>" & rahmen & servera & inhaltgesamt & "</body></html>"
Vielleicht bringt es etwas, auch das Javascript in die Datei zu schreiben?

Grüße
bastla
Member: Azubi1452
Azubi1452 Oct 26, 2010 at 13:10:26 (UTC)
Goto Top
Hallo,

okay das hatte ich heute Morgen tatsächlich vergessen !

Aber auch wenn ich das Javascript ausgeben lasse passiert nichts....

Ist eigentlich die Reihenfolge in der ich die variablen ausgebe relevant ?

Können Variablen innerhalb jeweils anderen Variablen überhaupt miteinander "kommunizieren " ?
Bsp:
java = java & "function showAll() {"   
java = java & "  showItem(""HSS0"", ""HST0"");"  
servera = servera & "<div style=cursor:hand onclick=toggleItem( ""HSS0"", ""HST0"" );>"  

HSS0 wird in der Variable java und servera gebraucht. Ist es überhaupt Möglich die Variable so weiterzureichen ?

Weil in der server- Variable sehe ich z.B den HTML-Teil aber der Javateil funktioniert dort nicht.

Hast du, oder jemand anderes, noch eine Idee woran es liegen könnte ?
Ich werd` nun mich noch weiter in dieses Toggle-Element einlesen.

Danke & Gruß,
Azubi
Member: bastla
bastla Oct 26, 2010 at 13:22:22 (UTC)
Goto Top
Hallo Azubi1452!

Um den Variableninhalt von HSS0 und HST0 zwischen Anführungszeichen einzusetzen (ich hatte nur oberflächlich drübergeschaut face-sad) , müsste die Zeile so aussehen:
java = java & "  showItem(""" & HSS0 & """, """ & HST0 & """);"
Grüße
bastla
Member: Azubi1452
Azubi1452 Oct 29, 2010 at 11:34:12 (UTC)
Goto Top
Hallo zusammen,

Danke ersteinmal für die bisherigen Beiträge, aber leider will mein Skript immernoch nicht so wie ich es will.

Nachdem ich die Tage über weiter getüftelt und getestet habe, habe ich mal beschlossen meine Fehler an einem kleinen BeispielCode zu verdeutlichen .

Beispiel.vbs:
toggle = "<a href='javascript: toggle()'>toggle</a>"  
toggle = toggle & "<div id='div1' style='display:none'>"  
toggle = toggle & "Don't display me"  
toggle = toggle & "</div>"  
toggle = toggle & "<script>"  
toggle = toggle & "function toggle(){"  
toggle = toggle &	"var div1 = document.getElementById('div1')"  
toggle = toggle &	"if (div1.style.display == 'none') {"  
toggle = toggle &		"div1.style.display = 'block'"  
toggle = toggle &	"} else {"  
toggle = toggle &		"div1.style.display = 'none'"  
toggle = toggle &	"}"  
toggle = toggle & "}"  
toggle = toggle & "</script>"  
Ausgabezeilen innerhalb der Datei:
Set fso = CreateObject("Scripting.FileSystemObject")  
sZDatei = "C:\Skript\Ergebnis\test.html"  
Set oZDatei = fso.OpenTextFile(sZDatei, 2, True)
oZDatei.Write "<HTML><Body>" & toggle &"</body></html>"  
oZDatei.Close

Auf der test.html- Seite sieht man zwar einen Link mit der Beschreibung: toggle, aber wenn ich raufklicke passiert nicht -> normalerweise sollte ein "Don't display me " erscheinen, was auch funktioniert, wenn ich die Javazeilen in eine -html Datei schreibe und dementsprechend das: toggle = toggle jeweils weg nehme.

Ich habe die -> ' <- schon durch einfache " und durch doppelte " ersetzt - es bleibt jedoch beim selben Ergebnis.

Wenn ihr mir hier helfen könntet, könnte ich es auf mein richtiges Skript anwenden und ihr würdet mir einen riesen Gefallen tun.

Danke schonmal,
Gruß Azubi
Mitglied: 76109
76109 Nov 01, 2010 at 09:31:55 (UTC)
Goto Top
Hallo Azubi!

Mit Deinem Beispiel funktioniert es so nicht. Wenn ich ich aber den Toggle-Text mit Zeilenvorschub in die Html schreibe, dann funktioniert es:
toggle = "<a href='javascript: toggle()'>toggle</a>" & vbCrLf  
toggle = toggle & "<div id='div1' style='display:none'>Don't display me</div>" & vbCrLf  
toggle = toggle & "<script>" & vbCrLf  
toggle = toggle & "function toggle(){" & vbCrLf  
toggle = toggle & "    var div1 = document.getElementById('div1')" & vbCrLf  
toggle = toggle & "    if (div1.style.display == 'none') {" & vbCrLf  
toggle = toggle & "        div1.style.display = 'block'" & vbCrLf  
toggle = toggle & "    } else {" & vbCrLf  
toggle = toggle & "        div1.style.display = 'none'" & vbCrLf  
toggle = toggle & "    }" & vbCrLf  
toggle = toggle & "}" & vbCrLf  
toggle = toggle & "</script>" & vbCrLf  

Set fso = CreateObject("Scripting.FileSystemObject")  
sZDatei = "E:\Threads\$Test\test.html"  
Set oZDatei = fso.OpenTextFile(sZDatei, 2, True)
oZDatei.Write "<html><body>" & toggle &"</body></html>"  
oZDatei.Close

Gruß Dieter
Member: Azubi1452
Azubi1452 Nov 01, 2010 at 10:47:26 (UTC)
Goto Top
Hallo Didi,

du hattes recht gehabt !!
Nun funktioniert mein Javacode

Vielen Dank !

Gruß,
Azubi
Mitglied: 76109
76109 Nov 01, 2010 at 12:29:38 (UTC)
Goto Top
Hallo Azubi!

Yepp, gern geschehenface-wink

Gruß Dieter
Member: Azubi1452
Azubi1452 Nov 18, 2010 at 15:07:59 (UTC)
Goto Top
Hallo Leute,

ich habe mal wieder ein bisschen an meinem Skript weiter gebastelt und bin nun dabei die Einträge von den Server die keine Error`s haben garnicht erst in meiner LogHtml- Datei anzuzeigen.
Also bisher bekomme ich,wenn keine Errors gefunden worden, nur die Überschriften ohne einen Eintrag in meinem Ergebnislog ausgegeben.
Ich möchte aber, dass wenn es keine Fehler gibt auch diese leere Tabelle nicht gibt.
Mit einer einfachen IF Abfrage habe ich es schon versucht - leider ohne Erfolg.
Es geht um die Variable "tblmail" und "mail". In "tblmail" ist die Tabelle und in der Variable "mail" steht der Inhalt (also die Errormeldungen).

Nun habe ich folgendes versucht:

 
if tblmail = "<br><TABLE border=1><Tr><TD>Ereigniskennung</TD><TD>Beschreibung</TD><TD>Quelle</TD><TD>Datum </TD></TR></Table>" AND mail <> 0 then  
        tblmail = 0
        end if

Wenn ich mir die Variable mail ausgebe, bekomme ich ein leeres Fenster zurück - nur wie beschriebt man denn "nichts" in VBScript ?

Danke schonmal
Member: bastla
bastla Nov 18, 2010 at 16:48:05 (UTC)
Goto Top
Hallo Azubi1452!
wie beschriebt man denn "nichts" in VBScript ?
tblmail = ""
Grüße
bastla