Gast Hornochse Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 (bearbeitet) Hallo liebe Kollegen, ich bin dabei, ein VB-Skript zu schreiben, was täglich per geplanten Task automatisch den freien Festplattenplatz aller Server überprüft und in eine Ausgabe-Datei schreibt. Sollte der Platz eine festgelegte Grenze (z.B. 10 GB) unterschreiten, wird eine Mail an mich gesendet, sodass ich handeln kann. Dies funktioniert auch ganz gut, jedoch habe ich diese Überprüfung für jeden einzelnen Server festgelegt. Allerdings möchte ich das ganze in eine Schleife packen, sodass ich den "Festplattenüberprüfungs-Quellcode" nur einmal schreiben muss und nicht für jeden Server separat. Der entsprechende Denkanstoß fehlt mir jedoch noch. Das zweite Problem ist, dass das Skript hängen bleibt, wenn ein Server nicht erreichbar (= ausgeschaltet) ist. Wie kann ich erreichen, dass heruntergefahrene Server übersprungen werden und das Skript beim nächsten Server weitermacht? Könnt ihr mir vielleicht helfen? Ist bestimmt ein Klacks, aber ich beiße mir hier die Zähne aus ;-) Vielen Dank schonmal! Hier der Quellcode: ' on error resume next ' Deklarationen dim server, server_ausgabe, platz, round, totalsize, achtung, server_ueberpruefung, fso, objShell, f, objwo dim mail_senden, drive ' Arrays deklarieren dim a(12) dim b(12) Set fso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Wscript.shell") ' Umrechnung B --> GB (1024 x 1024 x 1024) Const MB = 1073741824 ' Username wird ausgelesen dirA = objShell.ExpandEnvironmentStrings("%userprofile%") Set f = fso.OpenTextFile(dirA & "\Desktop\ausgabe.htm", 2, True) ' Server festlegen - wichtig bei Serveränderungen!!! set server1 = getobject("winmgmts://***.de") set server2 = getobject("winmgmts://***.de") 'set server3 = getobject("winmgmts://***.de") ' Server funktioniert nicht set server4 = getobject("winmgmts://***.de") set server5 = getobject("winmgmts://***.de") set server6 = getobject("winmgmts://***.de") 'set server7 = getobject("winmgmts://***.de") ' Server heruntergefahren set server8 = getobject("winmgmts://***.de") set server9 = getobject("winmgmts://***.de") set server10 = getobject("winmgmts://***.de") set server11 = getobject("winmgmts://***.de") set server12 = getobject("winmgmts://***.de") set server13 = getobject("winmgmts://***.de") ' Servernamen werden ins Array geschrieben, damit diese in Ausgabe.Datei angezeigt werden a(0) = "***" a(1) = "***" a(2) = "***" a(3) = "***" a(4) = "***" a(5) = "***" a(6) = "***" a(7) = "***" a(8) = "***" a(9) = "***" a(10) = "***" a(11) = "***" a(12) = "***" b(0) = "192.168.23.5" b(1) = "192.168.23.6" b(2) = "192.168.23.7" b(3) = "192.168.23.10" b(4) = "192.168.23.11" b(5) = "192.168.23.12" b(6) = "192.168.23.13" b(7) = "192.168.23.14" b(8) = "192.168.23.15" b(9) = "192.168.23.16" b(10) = "192.168.23.17" b(11) = "192.168.23.18" b(12) = "192.168.23.19" mail_senden = 0 achtung = "<b><font color=red>Achtung!!!</font></b>" f.writeline "<i>Warnungslevel beträgt 5 GB</i><p>" ' Server1 wird überprüft set server_ueberpruefung = server1.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(0) & " - (" & b(0) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server2 wird überprüft set server_ueberpruefung = server2.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(1) & " - (" & b(1) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server3 wird überprüft set server_ueberpruefung = server3.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(2) & " - (" & b(2) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server4 wird überprüft set server_ueberpruefung = server4.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(3) & " - (" & b(3) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server5 wird überprüft set server_ueberpruefung = server5.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(4) & " - (" & b(4) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server6 wird überprüft set server_ueberpruefung = server6.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(5) & " - (" & b(5) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server7 wird überprüft 'set server_ueberpruefung = server7.instancesof("Win32_logicaldisk") 'f.writeline "<html><b>" & a(6) & " - (" & b(6) & ")</b><br></html>" 'for each drive in server_ueberpruefung 'if drive.drivetype = 3 then 'if (mid(drive.freespace / MB,1,5)) < 5 then 'f.writeline achtung & "<br>" 'mail_senden = 1 'else 'end if 'f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" 'else 'end if 'next 'f.writeline "<p>" ' Server8 wird überprüft set server_ueberpruefung = server8.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(7) & " - (" & b(7) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server9 wird überprüft set server_ueberpruefung = server9.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(8) & " - (" & b(8) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server10 wird überprüft set server_ueberpruefung = server10.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(9) & " - (" & b(9) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server11 wird überprüft set server_ueberpruefung = server11.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(10) & " - (" & b(10) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server12 wird überprüft set server_ueberpruefung = server12.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(11) & " - (" & b(11) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" ' Server13 wird überprüft set server_ueberpruefung = server13.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(12) & " - (" & b(12) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" '--------------------------------------------------------------------------------------------------------- ' Ausgabe-Datei schließen '--------------------------------------------------------------------------------------------------------- f.close '--------------------------------------------------------------------------------------------------------- ' E-Mail konfigurieren - E-Mail wird nur gesendet, wenn mail_senden = 1 '--------------------------------------------------------------------------------------------------------- if mail_senden = 1 then Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Festplattenplatz" objMessage.From = """Festplatten-Auslese-Skript by ***"" <***@***.de>" objMessage.To = "***@***" objMessage.CC = "" objMessage.BCC = "" objMessage.TextBody = "see attached File" objMessage.AddAttachment dirA & "\Desktop\ausgabe.htm" objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "***" objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'objMessage.Configuration.Fields.Item _ '("http://schemas.microsoft.com/cdo/configuration/sendusername") = 'objMessage.Configuration.Fields.Item _ '("http://schemas.microsoft.com/cdo/configuration/sendpassword") = objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 objMessage.Configuration.Fields.Update objMessage.Send msgbox "Sie wurden per Mail benachrichtigt, da der freie Speicherplatz von mind. einer Partition den festgelegten Wert von " & 5 & " GB unterschreitet." & vbnewline & "Die Mail ging an '***@***.de' !" & vbnewline & "Datei wurde erfolgreich in '" & dirA & "\Desktop' abgelegt!" else msgbox "Datei wurde erstellt!" end if Bearbeitet 8. Februar 2010 von Hornochse Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 9. Februar 2010 Teilen Geschrieben 9. Februar 2010 Du kannst die Überprüfung an sich doch in eine Funktion/Sub legen die dann nur mit dem Übergabeparameter "Server" aufrufen...Das wäre, denke ich das einfachste Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Hornochse Geschrieben 9. Februar 2010 Teilen Geschrieben 9. Februar 2010 Und wie mach ich das, dass das Skript weiß, welche Server er überprüfen soll? Irgendwie steh ich anscheinend ziemlich aufm Schlauch... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Moinsen, also wie man Funktionen definiert und Werte übergibt ist hier recht gut beschrieben. Ich würde mir ein mehrdimensionales Array basteln wo die Servernamen/IP's dann drinne stehen und das ganze dann weitergeben. Array(0,0)=[Servername1] Array(1,0)=[ServerIP1] Array(0,1)=[Servername2] ... For i=0 to [Anzahl der Server] MeineFunktion(Array(0,i),Array(1,i)) next Und in die Funktion passt du dann halt nur entsprechend an Hoffe das war einigermaße einleuchtend XD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Und in der Funktion machst du als erstes nen Ping auf den Server. Wenn der Ping ok ist, dann führst du die Abfrage aus. Ansonsten überspringst du die Abfrage nach dem Plattenplatz. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Hornochse Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Ich arbeite ja (ziemlich weit oben im Quellcode zu sehen) mit der getobject-Methode: getobject("winmgmts://<servername>.<domain>.de") Nur wenn ich das ganze dann in ein Array packe (hatte ich vorher auch schon getestet) dann kommt ne Fehlermeldung: Dim c(12) c(0) = getobject("winmgmts://<servername1>.<domain>.de") c(1) = getobject("winmgmts://<servername2>.<domain>.de") c(2) = getobject("winmgmts://<servername3>.<domain>.de") ' (usw bis 12 --> 13 Server, Array geht bei 0 los) ' Server werden überprüft for z = 0 to 12 set server_ueberpruefung = c(z).instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(z) & " - (" & b(z) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" next Meckern tut VBS dann bei folgender Zeile: set server_ueberpruefung = c(z).instancesof("Win32_logicaldisk") Die Fehlermeldung lautet: Das Objekt unterstützt diese Eigenschaft oder Methode nicht. Wo ist mein Fehler? Kann ich das getobject nicht in ein Array packen? Vielen Dank für Deine Hilfe! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Hornochse Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Und in der Funktion machst du als erstes nen Ping auf den Server. Wenn der Ping ok ist, dann führst du die Abfrage aus. Ansonsten überspringst du die Abfrage nach dem Plattenplatz. Das mit dem Ping bau ich dann ein, wenn die Serverüberprüfung in der Schleife erfolgreich abläuft. Vielen Dank schonmal dafür! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Ich würde nicht das GetObject in das Array verfrachten sondern den Server an sich, dann kannst du das im Getobject zusammenbasteln... c(2) = <servername3> . . . getobject("winmgmts://" & c(z) & ".<domain>.de") Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Hornochse Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Anscheinend stell ich mich echt zu blöd an *schäm* a(0) = "<server1>" a(1) = "<server2>" a(2) = "<server3>" b(0) = "192.168.23.5" b(1) = "192.168.23.6" b(2) = "192.168.23.7" ' Die IP-Adressen sind egal - sie sind nur für die Ausgabe-Datei wichtig ' Server werden überprüft for z = 0 to 12 server = getobject("winmgmts://" & a(z) & ".cvhassfurt.de") set server_ueberpruefung = server.instancesof("Win32_logicaldisk") f.writeline "<html><b>" & a(z) & " - (" & b(z) & ")</b><br></html>" for each drive in server_ueberpruefung if drive.drivetype = 3 then if (mid(drive.freespace / MB,1,5)) < 5 then f.writeline achtung & "<br>" mail_senden = 1 else end if f.writeline drive.name & " - " & drive.description & " - " & (mid(drive.freespace / MB,1,5)) & " GB frei von verfügbaren " & (mid(drive.size / MB,1,5)) & " GB - (" & (mid(drive.freespace / drive.size * 100,1,4)) & " % frei)<br>" else end if next f.writeline "<p>" next Er bringt mit immernoch o.g. Fehlermeldung in der Zeile server = getobject...: Das Objekt unterstützt diese Eigenschaft oder Methode nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Du hast an der Stelle glaube ich das "Set" vor Server vergessen ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Hornochse Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Dankeschön :-) Es funktioniert nun - wie einfach doch alles sein kann ;-) Vielen Dank für deine Hilfe! Jetzt ist der Ping als nächstes dran ;-) MfG Hornochse Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.