Jump to content

Speicherplatz überwachen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Hi @all!

 

Brauche mal wieder eure Hilfe. Möchte ohne kostenpflichtige zusatz tools die festplattenkapazitäten der einzelnen server (ca. 15) überwachen. Dachte da an ein vb script. Leider komme ich nur bis zur lokalen prüfung, sprich laufwerk c:. Das script sieht wie folgt aus:

 

 

Set fs = CreateObject("Scripting.FileSystemObject")

Set Drive = fs.GetDrive("C:\")

free = Drive.FreeSpace

MsgBox "Auf C: frei: " & FormatNumber(free/1024^2,2) & " MB"

 

Kann ich es überhaupt realisieren alle Laufwerke der einzelnen Server zentral abzufragen? Hätte das ganze gerne in einer csv Datei gespeichert.

 

Bin für jeden Tipp dankbar.

Link to comment

Hatte es als VB-Tool mit Progressbar gebastelt.

Hab den Code jetzt auf VBS mit CSV-Datei angepasst. Ich hoffe, du kommst damit klar. Kommentare sind keine drin ;)

 

const gDrive2Use="Z:"
dim arrPath(4)

arrPath(0)="\\server1\d$"
arrPath(1)="\\server2\d$"
arrPath(2)="\\server1\c$"
arrPath(3)="\\server2\c$"

gstrCSV="C:\ServerDiskSpace-" & Date() & ".csv"

'On Error Resume Next
Set FSO=WScript.CreateObject("Scripting.Filesystemobject")
Set txtStreamOut = FSO.CreateTextFile(gstrCSV,2)
ok = (Err.number = 0)
if ok then
on error goto 0
txtStreamOut.WriteLine "UNC-Pfad;MB Frei"

For i = 0 To 3
	txtStreamOut.WriteLine CheckSpace(i)
Next
end if

MsgBox "Fertig!" & chr(13) & "CSV-Datei: " & gstrCSV


Function CheckSpace(lngPos)

   strPath = arrPath(i)

   If ConnectLW(gDrive2Use, arrPath(i), False) = 0 Then
CheckSpace = arrPath(i) & ";" & GetDiskSpaceString(gDrive2Use)
   Else
       CheckSpace = arrPath(i) & ";nicht gefunden oder " & gDrive2Use & " wird bereits verwendet!"
   End If

   DisconnectLW gDrive2Use

End Function

Function GetDiskSpaceString(strLW)
On Error Resume Next

 Set fs = CreateObject("Scripting.FileSystemObject")
 Set Drive = fs.GetDrive(strLW)
 free = Drive.FreeSpace
 GetDiskSpaceString = FormatNumber(free/1024^2,2)

End Function

Function ConnectLW(strLW, strPath, boolInformOnErr)
Dim counter

Set wshnet = CreateObject("WScript.Network")

counter = 0

 Do
   counter = counter + 1
   On Error Resume Next
   wshnet.MapNetworkDrive strLW, strPath
   Select Case Err.Number
     Case 0        'kein Fehler
       'If boolInformOnErr Then MsgBox "Laufwerk " & strLW & " erfolgreich mit " & strPath & " verbunden!"
       counter = 4
     Case -2147024843  'Netzwerkpfad nicht gefunden
       If boolInformOnErr Then MsgBox "Pfad " & strPath & " nicht gefunden!" & Chr(13) & Err.Description
       counter = 4
     Case -2147024811, -2147023694     'LW wird bereits benutzt
       'If boolInformOnErr Then MsgBox "Laufwerk " & strLW & " bereits belegt!" & chr(13) & Err.Description
       On Error Resume Next
       wshnet.RemoveNetworkDrive strLW
       If Err.Number <> 0 Then 'Ressource wird verwendet und kann nicht getrennt werden
         If boolInformOnErr Then MsgBox "Laufwerk " & strLW & " kann nicht getrennt werden!" & Chr(13) & Err.Description
         counter = 4
       End If
     Case Else
       If boolInformOnErr Then MsgBox Err.Number & Chr(13) & Err.Description
       counter = 4
   End Select
 Loop Until counter > 3

 ConnectLW = Err.Number
 On Error GoTo 0

Set wshnet = Nothing

End Function

Sub DisconnectLW(strLW)

   Set wshnet = CreateObject("WScript.Network")

   On Error Resume Next
   Do
   wshnet.RemoveNetworkDrive strLW
   If Err.Number <> 0 Then 'Ressource wird verwendet und kann nicht getrennt werden
     counter = counter + 1
   Else
     counter = 4
   End If
   Loop Until counter > 3

   Set wshnet = Nothing

End Sub

Link to comment

Das von blub ist auch gut. Könnte man in einer Batch verarbeiten und die Ausgabe in eine Datei umleiten...

 

Ansonsten: Ändere mal den Code der Funktion "CheckSpace" so ab:

Function CheckSpace(lngPos)

[color="DarkRed"]   lngConnectLWErr = ConnectLW(gDrive2Use, arrPath(i), False)
   If lngConnectLWErr = 0 Then
[/color]	CheckSpace = arrPath(i) & ";" & GetDiskSpaceString(gDrive2Use)
   Else
       CheckSpace = arrPath(i) & ";nicht gefunden oder " & gDrive2Use & " wird bereits verwendet! [color="darkred"]Fehler: " & lngConnectLWErr[/color]
   End If

   DisconnectLW gDrive2Use

End Function

 

dann schreibt er die Fehlernummer mit raus, warum er das Laufwerk nicht verbinden konnte.

Link to comment

Ja, bei mir funktioniert er...

Allerdings ist der Code am Anfang noch ein wenig unvollständig! Erzeugt ja immer ne Datei mit Datum. Überschreibt eine bestehende jedoch nicht! Deshalb steht bei Dir vermutlich immer noch "nicht gefunden...". Vermutlich hast du das erste Mal den Code mit flaschen Pfaden aufgerufen?

Ich hab's jetzt noch ein wenig umgebaut. Ersetzte mal den oberen Teil zwischen den arrPfad-Deklarationen und der Function CheckSpace hiermit:

 

gstrCSV="C:\ServerDiskSpace-" & Date() & ".csv"

On Error Resume Next
Set FSO=WScript.CreateObject("Scripting.Filesystemobject")
if FSO.FileExists(gstrCSV) then
if MsgBox("Datei existiert bereits! Überschreiben?",vbYesNo) = vbYes then varOK = true else varOK = false
if varOK then
	Set txtStreamOut = FSO.OpenTextFile(gstrCSV,2)
end if
else
varOK = true	
Set txtStreamOut = FSO.CreateTextFile(gstrCSV,2)
end if
ok = (Err.number = 0)
if (ok and varOK) then
on error goto 0
txtStreamOut.WriteLine "UNC-Pfad;MB Frei"

For i = 0 To 3
	txtStreamOut.WriteLine CheckSpace(i)
Next
MsgBox "Fertig!" & chr(13) & "CSV-Datei: " & gstrCSV
else
if not ok then MsgBox "Datei " & gstrCSV & " konnte nicht erzeugt/geöffnet werden!"
end if

Link to comment

Eine Kleinigkeit hätte ich da doch noch. Wie kann ich es realisieren, dass er in diesem Script erst dann eine Datei erstellt wenn der verfügbare Festplattenplatz weniger als 10 GB beträgt?

 

Hintergrund: So könnte ich mir tägliche Emails sparen und würde via batch mir diese Datei nur schicken lassen wenn sie erstellt wurde, sprich die freien Festplattenkapazitäten unter 10 GB sind.

 

müsste ja irgendwie so aus sehen oder!?

 

if GetDiskSpaceString(gDrive2Use) < 10 then

 

müsste aber bestimmt das komplette script umstellen wegen der abfrage reihenfolge, oder?

 

Vielen Dank vorab

Link to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...