Als Administrator weiß man doch lieber vor den Nutzern, wenn etwas nicht mehr funktioniert. Noch besser ist natürlich, wenn man aufgrund einer rechtzeitigen Information ein sich androhendes Unheil abwenden kann. Und solange man noch einen funktionierenden E-Mail-Server hat, bietet sich dieser doch als Informant an.
Ein Problem hier ist meist das Fehlen von Überwachungstools, deren Konfiguration auf das zu überwachende Objekt oder die Wahl der richtigen Informationsweitergabe. Ein Eintrag in einem Logfile nützt mir beispielsweise nichts, wenn ich immer wieder mal nicht rechtzeitig reinschaue. Außerdem nutze ich als Admin doch lieber Automatismen, die mir einiges abnehmen.
Ein wiederkehrendes Thema ist das Volllaufen von Festplatten, ganz besonders gerne auch derjenigen, die Transaktionsprotokolle von Datenbanken beherbergen. Erscheint dann die Meldung „Kein Platz mehr auf Laufwerk X:“ zusammen mit „Übrigens, die Datenbanken sind deswegen auch angehalten worden“, ist das besonders ärgerlich.
Unter Windows (ab Windows 2003) kann mit einem VBSkript eine Kontrolle und Info erfolgen. Das Skript könnte über einen Task (zum Beispiel unter Windows Server 2008 R2 über die Aufgabenplanungsbibliothek einzurichten) regelmäßig gestartet werden und beim Unterschreiten einer Grenze per E-Mail warnen.
Aufbau des Skriptes
Nach der Definition von Konstanten zur besseren Auswahl beim Zusammenstellen der CDO-Nachricht werden über Variablen die Grenze und die Daten für den E-Mail-Aufbau festgelegt. Über die Funktion „Platzkontrolle“ können dann Laufwerke auf noch freien Speicherplatz geprüft und zuletzt mit Hilfe der Prozedur „CDOmail“ eine E-Mail verschickt werden. (Möchtet ihr die Funktion oder die Prozedur in anderen Skripten verwenden, so wären die von mir zur besseren Übersicht am Skriptanfang definierten dazugehörigen Variablen und Konstanten „mitzunehmen“.)
Die Idee zur CDOmail habe ich von http://www.msxfaq.de/code/sendcdomail.htm und Infos von http://www.paulsadowski.com/wsh/cdo.htm
Das VBSkript
-
Option explicit
-
-
Dim strIPdesSMTP, strBetreff, strAn, strAbsender, strAnhang, strBenutzer, strPasswort
-
Dim intGrenze, kritisch, strText
-
Dim fso, oDrive, strPlatz, vglGrenze
-
Dim oMessage
-
-
‚Wo soll die E-Mail angeliefert werden?
-
Const cdoSendUsingPickup = 1 ‚…im Pickup-Verzeichnis des auf dem skriptausführenden Server laufenden SMTP-Dienstes
-
Const cdoSendUsingPort = 2 ‚…an einen SMTP-Server im Netzwerk
-
-
‚Wie soll sich am SMTP-Server authentifiziert werden?
-
Const cdoAnonymous = 0 ‚keine Authentifizierung erforderlich am SMTP-Server
-
Const cdoBasic = 1 ‚dann muss strBenutzer und strPasswort angegeben werden
-
Const cdoNTLM = 2 ‚der das Skript ausführende Benutzer wird zur Anmeldung am SMTP-Server benutzt
-
-
-
strIPdesSMTP = "10.10.10.10" ‚IP des SMTP-Servers eintragen
-
strBetreff= "Hier steht der Betreff"
-
strAn = "empf1@dom.de;empf2@dom.de"
-
strAbsender = "abs@dom.de"
-
strAnhang = "" ‚Eventuell eine Datei mit vollständigem Pfad angeben
-
-
‚für den Fall der Klartext-Authentifizierung (cdoBasic)
-
strBenutzer = "Domäne\username"
-
strPasswort = "geheim" ‚ Achtung: Wird hier ein Passwort benutzt, sollte das VB-Skript verschlüsselt werden
-
-
‚Bei Unterschreiten welcher Grenze soll eine E-Mail versandt werden?
-
intGrenze = 2048 ‚in MB
-
-
kritisch = "Nein" ‚Wird bei Unterschreiten der Grenze durch die Funktion Platzkontrolle auf Ja gesetzt
-
-
strText = "Noch vorhandener Platz auf den Laufwerken:" & vbcrlf
-
strText = strText & Platzkontrolle("C:\",intGrenze) & vbCrLf
-
strText = strText & Platzkontrolle("D:\",intGrenze) & vbcrlf
-
‚Weitere Laufwerke prüfen? => Kommentarzeichen der nächsten beiden Zeilen entfernen
-
’strText = strText & Platzkontrolle("E:\",intGrenze) & vbcrlf
-
’strText = strText & Platzkontrolle("F:\",intGrenze) & vbcrlf
-
-
If kritisch = "Ja" Then
-
CDOmail strBetreff, strAbsender, strAn, strText, strAnhang
-
End if
-
-
Function Platzkontrolle(sLW,sLW_Warngrenze)
-
-
Set fso = CreateObject("Scripting.FileSystemObject")
-
Set oDrive = fso.getdrive(sLW)
-
strPlatz = oDrive.freespace
-
strPlatz = FormatNumber (strPlatz/1024^2,2)
-
vglGrenze = FormatNumber (sLW_Warngrenze,2)
-
If abs(vglGrenze)>abs(strPlatz) Then
-
kritisch = "Ja"
-
Platzkontrolle = "ACHTUNG: Auf " & sLW & " wurde die " & vglGrenze & " MB Grenze unterschritten. Noch " & strPlatz & " MB frei"
-
Else
-
Platzkontrolle = sLW & "OK. Noch " & strPlatz & " MB frei"
-
End if
-
-
Set oDrive = nothing
-
Set fso = nothing
-
-
End Function
-
-
-
Sub CDOmail(fBetreff,fAbs,fAn,fText,fAnhang)
-
Set oMessage = CreateObject("CDO.Message")
-
‚Erzeugung der Nachricht
-
With oMessage
-
.Subject = fBetreff
-
.From = fAbs
-
.To = fAn
-
.TextBody = fText
-
If fAnhang<>"" Then
-
oMessage.AddAttachment fAnhang
-
End If
-
‚Server Verbindungsdaten
-
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
-
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strIPdesSMTP
-
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoNTLM
-
‚Wird cdoBasic benutzt, die beiden folgenden Zeilen aktivieren
-
‚.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strBenutzer
-
‚.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPasswort
-
.Configuration.Fields.Update
-
.send
-
End With
-
-
Set oMessage = nothing
-
-
End Sub
-
http://faq-o-matic.net/?p=2549