Zum Inhalt springen

[VB-Skript] Server Festplattenplatz auslesen


Gast Hornochse

Empfohlene Beiträge

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 von Hornochse
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...