Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, eine E-Mail-Warnung unter Windows Server 2008 auszulösen, wenn auf logischen Datenträgern nur noch wenig Speicherplatz zur Verfügung steht. Ich habe 2 SQL-Server, die wegen der DB-Protokolldateien fast keinen Speicherplatz mehr haben.
Danke, Ryan
Antworten:
Eine einfache Möglichkeit, Windows Server 2008 zum Senden von E-Mail-Benachrichtigungen über zu wenig Speicherplatz zu veranlassen, ist die Verwendung des Taskplaners und des Systemprotokolls. Wenn der freie Speicherplatz unter den in HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ DiskSpaceThreshold angegebenen Prozentsatz fällt, wird im Systemprotokoll ein Ereignis aufgezeichnet, das eine Aufgabe zum Senden einer E-Mail-Nachricht auslösen kann.
quelle
powershell
das Programm-command &{send-mailmessage -from [email protected] -to [email protected] -subject 'Alert from Task Scheduler' -body 'This is an automated message from a task scheduled on the server. Testing powershell email.' -smtpserver x.x.x.x}
Ich habe meiner (separaten) Nagios-Instanz die Speicherplatzüberwachung über snmp hinzugefügt.
quelle
Warum führen Sie nicht jeden Tag ein Powershell-Skript als Zeitplanaufgabe aus? Wenn das Skript feststellt, dass der freie Speicherplatz auf der Festplatte weniger als 10% beträgt, erhalten Sie eine E-Mail oder eine Benachrichtigung.
Hier ist ein Beispielcode zum Überprüfen des freien Speicherplatzes der Festplatten:
Get-Content für jedes Objekt {$ ; Get-WMIObject-Computername $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
quelle
Beide Beispiele funktionieren aufgrund falscher PowerShell-Syntax nicht. Der folgende Code listet die Volume-Größen des aktuellen Hosts auf (mit PowerShell 5.0):
Der folgende Code listet die Volumengrößen der in server.txt aufgelisteten Hosts auf :
Randnotiz
Beachten Sie, dass der äußere Platzhalter
$_
die Serveradressen auflistet, während der innere Platzhalter$_
die Geräte auflistet. Dies ist ein häufiges Problem für PowerShell-Neulinge. Wenn Sie die Serveradresse in der inneren Schleife verwenden möchten, müssen Sie sie in der äußeren Schleife einer neuen Variablen zuweisen.Die hier verwendete Forensoftware ist fehlerhaft. In der Post-Vorschau wird sie
$_
korrekt als$_
gerade angezeigt , wenn sie nicht als Code maskiert ist. Im letzten Beitrag wird jedoch der Unterstrich entfernt, wodurch die PowerShell-Beispiele fehlerhaft werden.quelle
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
kann ich den verbleibenden Speicherplatz auf dem Laufwerk anzeigen. Als PS - Neuling verstehe ich den nächsten Schritt zur Automatisierung nicht ganz Laufwerk war unter einem bestimmten Speicherplatzgrenzwert, verbinden Sie einen PS-Befehl zum Senden und E-Mailen. Ich sehe, dass E-Mail von einem Post mit boadad oben gesendet werden kann, weiß-command &{send-mailmessage ...
aber nicht, wie Sie Ihre mit Logik verbinden, die vorgibt, dass wenig Speicherplatz zum Senden von E- Mail erforderlich ist Thx.Mit diesem Skript können Sie eine E-Mail über Ihren E-Mail-Server senden. Ersetzen Sie einfach den Namen des SMTP-Servers durch den Namen Ihres Servers. Wenn Sie sich auf demselben Computer befinden, verwenden Sie "localhost" (der SMTP-Server muss funktionsfähig sein). Das Skript finden Sie auch hier: https://gallery.technet.microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65
Nachdem das Skript auf dem lokalen Laufwerk gespeichert wurde, kann es problemlos mit Powershell ausgeführt und getestet werden. Sobald das Skript einwandfrei zu funktionieren scheint, kann es mit dem Windows-Taskplaner je nach Bedarf für die tägliche oder stündliche Ausführung geplant werden. In diesem Artikel wird erläutert, wie Sie ein Skript mit dem Taskplaner ausführen. https://www.metalogix.com/help/Content%20Matrix%20Console/SharePoint%20Edition/002_HowTo/004_SharePointActions/012_SchedulingPowerShell.htm
quelle
Ich habe das Skript repariert. Erstellen Sie einfach eine Textdatei mit dem Namen server.txt und geben Sie die IP-Adresse oder die Servernamen an. Anschließend können Sie das folgende Skript ausführen
Get-Content server.txt | für jedes Objekt {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
Grüße, Luis.
quelle
Get-Content server.txt | für jedes Objekt {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
quelle