PowerShell: Simpel freien Speicherplatz von AD-Computern überwachen
Aus der Sammlung „kann man machen, muss man aber nicht“ – ein weiteres PowerShell-Script, dass bei allen aktiven und erreichbaren AD-Integrierten Windows Systemen die freie Kapazität lokaler Datenträger ausliest und gegen einen bestimmten Wert prüft. Bei erreichen des definierten Grenzwertes wird eine E-Mailbenachrichtigung ausgelöst.
Voraussetzung sind die Active Directory PowerShell Add-Ins.
#Allgemeine Variablen definieren
$PSMailDomain = "Mail-Domain"
$PSEmailServer = "SMTP-Server"
$PSEmailRecipient = "Empfaenger"
$FreeSpaceThreshold = "0.04" # 0.04 Entspricht 4% freiem Speicherplatz
#Optional Active Directory PowerShell-Modul Importieren
#Import-Module ActiveDirectory
#Abfragen der aktiven Computerkonten im Active Directory
$ADComputers = Get-ADComputer -Filter {(Enabled -eq $True)}
ForEach ($ADComputer in $ADComputers) {
$servername = $ADComputer.Name
#Abfragen der Disks des entsprechenden Systems mit Speicher weniger 4%
$ActualDisk = Get-WmiObject win32_logicaldisk -ComputerName $servername -Filter "Drivetype=3" -ErrorAction SilentlyContinue | Where-Object { ($_.freespace/$_.size) -le $FreeSpaceThreshold }
if ($ActualDisk) {
#Einheiten umrechnen
$Diskname = $ActualDisk.VolumeName
$VolumeLabel = $ActualDisk.DeviceID
$DiskFreeSpace = "{0:n2}" -f($ActualDisk.FreeSpace/1gb)
$DiskSize = "{0:n2}" -f($ActualDisk.Size/1gb)
$DiskFreeSpacePerc = ($ActualDisk.freespace/$ActualDisk.size)
#E-Mail Notification senden
Send-MailMessage -to "$PSEmailRecipient" -from "$env:computername@$PSMailDomain" -Subject "$servername | $VolumeLabel | $Diskname | Speicherplatz gering!" -body "<b>$servername</b><br /><br />Freier Speicherplatz auf $VolumeLabel $Diskname liegt bei $DiskFreeSpace Gbyte von insgesamt $DiskSize Gbyte." -BodyAsHtml
}
}
In Intervallen via Aufgabenplanung ausgeführt, unterstützt das Script bei der täglichen Administration.
Mit dem Parameter „SearchBase“ kann der Filter noch erweitert werden. Bspw. um nur Computer-Accounts aus einer bestimmten Organisationseinheit oder Gruppe zu überprüfen.
In diesem Beispiel die OU Server:
-Filter * -SearchBase "OU=Server, DC=domain, DC=local"