Diskfree & Diskused mit E-Mail Meldung abfragen
Ich wurde nochmals durch einen Kollegen gebeten Ihn zu unterstützen und natürlich möchte ich das hier niemandem vorenthalten.
Was ist zu tun: Der Server läuft aufgrund von fehlendem Monitoring (Warum auch immer und dazu sag ich hier jetzt mal nichts…) immer mal wieder unerkannt voll. Dieses kleine Script soll den Speicherplatz auswerten und ab einem bestimmten Wert eine E-Mail verschicken und vor der drohenden Gefahr warnen.
Das Script kann von jedem angepasst werden. Wer möchte kann hier nicht auf den gefüllten Speicher kontrollieren sondern auf den Freien Speicher oder eben auf den Prozentwert der selbigen. Hierzu gebe ich dann einen Hinweis an der entsprechenden Stelle.
Fangen wir einfach mal an mit dem Befehl „Get-PSDrive“. Dieser liefert eine Übersicht aller Laufwerke (samt Netzlaufwerke) und ein paar kleine Informationen dazu.
PS C:\Users\Fbn351> Get-PSDrive
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
A 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Aus...
Alias Alias
B 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Bes...
C 188,27 44,09 FileSystem C:\ Users\XXX
Cert Certificate \
D 763,54 167,97 FileSystem D:\
Env Environment
F 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Fir...
Function Function
G FileSystem G:\
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
I FileSystem I:\
J FileSystem J:\
K FileSystem K:\
M 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Mus...
O 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\PRI...
P 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\PRI...
S 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Sca...
Variable Variable
W 2069,03 1503,13 FileSystem \\192.XXX.XXX.XXX\Web
WSMan WSMan
X 226,18 1603,06 FileSystem \\192.XXX.XXX.XXX\Hom...
Y 226,18 1603,06 FileSystem \\192.XXX.XXX.XXX\Pri...Ich setze dann einfach meinen Fokus auf den Laufwerksbuchstaben meiner Wahl. Hier z.B. C:\
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
C 188,27 44,09 FileSystem C:\ Users\XXXJetzt habe ich aber ein Problem. Erweitere ich meinen Fokus auf Used oder Free erhalte ich lediglich eine Zahl die in Bytes dargestellt ist z.B.
PS C:\Users\Fbn351> Get-PSDrive C | Select-Object -Property Free
Free
----
47344922624
#bzw.
PS C:\Users\Fbn351> Get-PSDrive C | Select-Object -Property Used
Used
----
202149482496Das ist aber soweti erstmal nicht schlimm da ich für die Berechnung erstmal die Rohzahlen verwende. Hierzu setze ich beide Werte in eine Variable und berechne diese zusammen um meine Festplattenkapazität zu erhalten die sog. „Maximumsize“. Hierzu kürze ich den Befehl auch direkt ab und beziehe mir nur den gewünschten Wert aus dem Befehl. (BEFEHL).WERT
$FreeSpace = (Get-PSDrive C).Free
$UsedSpace = (Get-PSDrive C).Used
$Maximumsize = $UsedSpace+$FreeSpaceAls nächstes nehme ich einen der beiden Werte und teile Ihn durch die Maximalgröße und nehme diesen Wert dann noch mal 100 um auf den Prozentualen Anteil zu kommen.
$PercentageUsedSpace = ($UsedSpace/$Maximumsize)*100Hier könnt ihr entscheiden wonach Ihr prüfen wollt
Wer den freien Speicher prüfen will nimmt hier: ($FreeSpace/$Maximumsize)*100
Und wer auf Belegten Speicher prüfen will nimmt:
($UsedSpace/$Maximumsize)*100
Jetzt werden alle Angaben in GB umgerechnet und auf zwei Stellen gekürzt. Da ich hier den einfachen Weg nehme und die Variable in einem String umwandle kann eine Berechnung danach nicht mehr erfolgen. Der Wert wird dann im String auf zwei Dezimalstellen gekürzt.
$FreeSpace = ($FreeSpace /1GB) | % {$_.ToString("#.##")}
$UsedSpace = ($UsedSpace /1GB) | % {$_.ToString("#.##")}
$Maximumsize = ($Maximumsize /1GB) | % {$_.ToString("#.##")}% in Powershell
Das % was ich hier nach der Pipe | benutze ist eine gekürzte Variante von Foreach-Object – wir Menschen sind einfach nur zu faul zu schreiben
Daraufhin folgt lediglich noch die IF-Abfrage die man je nachdem ob man FreeSpace oder UsedSpace gewählt man anwenden muss.
#Variante Belegter Speicher ist groesser als 80%
if ($PercentageUsedSpace -ge 80) {
Write-Host "80% Erreicht!!!!! Wir saufen ab" -ForegroundColor "RED"
}
else{
Write-Host "Es ist noch Platz wir sind erst bei $PercentageUsedSpace %" -ForegroundColor "GREEN"
}
#Variante Freier Speicher ist groesser als 20%
if ($PercentageFreeSpace -ge 20) {
Write-Host "Es ist noch Platz wir sind noch bei $PercentageFreeSpace %" -ForegroundColor "GREEN"
}
else{
Write-Host "20% Unterschritten!!!!! Wir saufen ab" -ForegroundColor "RED"
}Hier kann man dann auch eine Funktion aufrufen die dann eine E-Mail mit den entsprechenden Parametern versendet.
Ich hoffe es hat euch gefallen. Hier noch das Script einmal vollständig.
$FreeSpace = (Get-PSDrive C).Free
$UsedSpace = (Get-PSDrive C).Used
$Maximumsize = $UsedSpace+$FreeSpace
$PercentageUsedSpace = ($UsedSpace/$Maximumsize)*100
$PercentageFreeSpace = ($FreeSpace/$Maximumsize)*100
$FreeSpace = ($FreeSpace /1GB) | % {$_.ToString("#.##")}
$UsedSpace = ($UsedSpace /1GB) | % {$_.ToString("#.##")}
$Maximumsize = ($Maximumsize /1GB) | % {$_.ToString("#.##")}
#Variante Belegter Speicher ist kleiner als 80%
if ($PercentageUsedSpace -ge 80) {
Write-Host "80% Erreicht!!!!! Wir saufen ab" -ForegroundColor "RED"
}
else{
Write-Host "Es ist noch Platz wir sind erst bei $PercentageUsedSpace %" -ForegroundColor "GREEN"
}
#Variante Freier Speicher ist groesser als 20%
if ($PercentageFreeSpace -ge 20) {
Write-Host "Es ist noch Platz wir sind noch bei $PercentageFreeSpace %" -ForegroundColor "GREEN"
}
else{
Write-Host "20% Unterschritten!!!!! Wir saufen ab" -ForegroundColor "RED"
}
Write-Host "FreeSpace = $FreeSpace"
Write-Host "UsedSpace = $UsedSpace"
Write-Host "Maximumsize = $Maximumsize"
Write-Host "PercentageUsedSpace = $PercentageUsedSpace"
Write-Host "PercentageFreeSpace = $PercentageFreeSpace"