it-swarm.com.de

Festlegen von Warnungen zu wenig Speicherplatz unter Windows Server 2008

Ich habe mich gefragt, ob es unter Windows Server 2008 eine einfache Möglichkeit gibt, eine E-Mail-Warnung auszulösen, wenn auf logischen Festplattenpartitionen nur noch wenig Speicherplatz vorhanden ist. Ich habe 2 SQL Server, denen aufgrund der DB-Protokolldateien fast der Speicherplatz ausgeht.

Danke, Ryan

29
rmwetmore

Eine einfache Möglichkeit, Windows Server 2008 dazu zu bringen, E-Mail-Warnungen mit geringem Speicherplatz zu senden, 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 auslösen kann Botschaft.

  1. Öffnen Sie den Taskplaner und erstellen Sie eine neue Aufgabe.
  2. Geben Sie einen Namen für die Aufgabe ein, wählen Sie "Ausführen, ob der Benutzer angemeldet ist oder nicht" und aktivieren Sie "Kennwort nicht speichern".
  3. Fügen Sie auf der Registerkarte Trigger einen neuen Trigger hinzu.
  4. Wählen Sie im Feld "Aufgabe starten" die Option "Bei einem Ereignis".
  5. Setzen Sie Log auf "System", Source auf "srv" und Event ID auf "2013".
  6. Fügen Sie auf der Registerkarte Aktionen eine neue Aktion hinzu.
  7. Setzen Sie die Aktion auf "E-Mail senden" und geben Sie die restlichen Einstellungen entsprechend ein.
  8. Um zu konfigurieren, wann das Ereignis mit wenig Speicherplatz im Systemprotokoll aufgezeichnet wird, öffnen Sie den Registrierungseditor, navigieren Sie zu HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters und fügen Sie einen DWORD-Wert mit dem Namen "DiskSpaceThreshold" hinzu, wobei Sie den gewünschten Prozentsatz festlegen. Wenn der Eintrag nicht vorhanden ist, ist der Standardwert 10.
37
Mark Pettibone

Ich habe meiner (separaten) Nagios-Instanz die Speicherplatzüberwachung über snmp hinzugefügt.

1

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 ForEach-Object {$ ; Get-WMIObject –Computername $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ . DeviceID; $. FreeSpace/1GB}}

1
sky100

Beide Beispiele funktionieren aufgrund einer falschen PowerShell-Syntax nicht. Der folgende Code listet die Volume-Größen des aktuellen Hosts (mit PowerShell 5.0) auf:

Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }

Der folgende Code listet die Volume-Größen der in server.txt aufgeführten Hosts auf:

Get-Content server.txt | %{ Get-WMIObject –computername $_ Win32_LogicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } }

Randnotiz

Beachten Sie, dass der äußere Platzhalter $_ listet die Serveradressen auf, während der innere Platzhalter $_ listet die Geräte auf. Für PowerShell-Neulinge ist dies ein häufiges Problem. Wenn Sie die Serveradresse in der inneren Schleife verwenden möchten, müssen Sie sie einer neuen Variablen in der äußeren Schleife zuweisen.

Die hier verwendete Forensoftware ist fehlerhaft. In der Post-Vorschau wird $_ richtig als $_ auch wenn nicht als Code maskiert. Der letzte Beitrag entfernt jedoch den Unterstrich und macht die PowerShell-Beispiele falsch.

1
Frank Heimes

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 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 je nach Anforderung mithilfe des Windows-Taskplaners täglich oder stündlich ausgeführt 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

############################################################################# 
#                                                                                                                                                     # 
#  Check disk space and send an HTML report as the body of an email.                                                   # 
#  Reports only disks on computers that have low disk space.                                                                 # 
#  Author: Mike Carmody                                                                                                                   # 
#  Some ideas extracted from Thiyagu's Exchange DiskspaceHTMLReport module.                                  # 
#  Date: 8/10/2011                                                          # 
#  I have not added any error checking into this script yet.                # 
#                                                                           # 
#                                                                           # 
############################################################################# 
# Continue even if there are errors 
$ErrorActionPreference = "Continue"; 

######################################################################################### 
# Items to change to make it work for you. 
# 
# EMAIL PROPERTIES 
#  - the $users that this report will be sent to. 
#  - near the end of the script the smtpserver, From and Subject. 

# REPORT PROPERTIES 
#  - you can edit the report path and report name of the html file that is the report.  
######################################################################################### 

# Set your warning and critical thresholds 
$percentWarning = 15; 
$percentCritcal = 10; 

# EMAIL PROPERTIES 
 # Set the recipients of the report. 
  $users = "[email protected]" 
    #$users = "[email protected]" # I use this for testing by uing my email address. 
  #$users = "[email protected]", "[email protected]", "[email protected]";  # can be sent to individuals. 


# REPORT PROPERTIES 
 # Path to the report 
  $reportPath = "D:\Jobs\DiskSpaceQuery\Reports\"; 

 # Report name 
  $reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html"; 

# Path and Report name together 
$diskReport = $reportPath + $reportName 

#Set colors for table cell backgrounds 
$redColor = "#FF0000" 
$orangeColor = "#FBB917" 
$whiteColor = "#FFFFFF" 

# Count if any computers have low disk space.  Do not send report if less than 1. 
$i = 0; 

# Get computer list to check disk space 
$computers = Get-Content "servers_c.txt"; 
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss"; 

# Remove the report if it has already been run today so it does not append to the existing report 
If (Test-Path $diskReport) 
    { 
        Remove-Item $diskReport 
    } 

# Cleanup old files.. 
$Daysback = "-7" 
$CurrentDate = Get-Date; 
$DateToDelete = $CurrentDate.AddDays($Daysback); 
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item; 

# Create and write HTML Header of report 
$titleDate = get-date -uformat "%m-%d-%Y - %A" 
$header = " 
  <html> 
  <head> 
  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> 
  <title>DiskSpace Report</title> 
  <STYLE TYPE='text/css'> 
  <!-- 
  td { 
   font-family: Tahoma; 
   font-size: 11px; 
   border-top: 1px solid #999999; 
   border-right: 1px solid #999999; 
   border-bottom: 1px solid #999999; 
   border-left: 1px solid #999999; 
   padding-top: 0px; 
   padding-right: 0px; 
   padding-bottom: 0px; 
   padding-left: 0px; 
  } 
  body { 
   margin-left: 5px; 
   margin-top: 5px; 
   margin-right: 0px; 
   margin-bottom: 10px; 
   table { 
   border: thin solid #000000; 
  } 
  --> 
  </style> 
  </head> 
  <body> 
  <table width='100%'> 
  <tr bgcolor='#CCCCCC'> 
  <td colspan='7' height='25' align='center'> 
  <font face='tahoma' color='#003399' size='4'><strong>AEM Environment DiskSpace Report for $titledate</strong></font> 
  </td> 
  </tr> 
  </table> 
" 
 Add-Content $diskReport $header 

# Create and write Table header for report 
 $tableHeader = " 
 <table width='100%'><tbody> 
 <tr bgcolor=#CCCCCC> 
    <td width='10%' align='center'>Server</td> 
 <td width='5%' align='center'>Drive</td> 
 <td width='15%' align='center'>Drive Label</td> 
 <td width='10%' align='center'>Total Capacity(GB)</td> 
 <td width='10%' align='center'>Used Capacity(GB)</td> 
 <td width='10%' align='center'>Free Space(GB)</td> 
 <td width='5%' align='center'>Freespace %</td> 
 </tr> 
" 
Add-Content $diskReport $tableHeader 

# Start processing disk space reports against a list of servers 
  foreach($computer in $computers) 
 {  
 $disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" 
 $computer = $computer.toupper() 
  foreach($disk in $disks) 
 {         
  $deviceID = $disk.DeviceID; 
        $volName = $disk.VolumeName; 
  [float]$size = $disk.Size; 
  [float]$freespace = $disk.FreeSpace;  
  $percentFree = [Math]::Round(($freespace / $size) * 100, 2); 
  $sizeGB = [Math]::Round($size / 1073741824, 2); 
  $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2); 
        $usedSpaceGB = $sizeGB - $freeSpaceGB; 
        $color = $whiteColor; 

# Set background color to Orange if just a warning 
 if($percentFree -lt $percentWarning)       
  { 
    $color = $orangeColor  

# Set background color to Orange if space is Critical 
      if($percentFree -lt $percentCritcal) 
        { 
        $color = $redColor 
       }         

 # Create table data rows  
    $dataRow = " 
  <tr> 
        <td width='10%'>$computer</td> 
  <td width='5%' align='center'>$deviceID</td> 
  <td width='15%' >$volName</td> 
  <td width='10%' align='center'>$sizeGB</td> 
  <td width='10%' align='center'>$usedSpaceGB</td> 
  <td width='10%' align='center'>$freeSpaceGB</td> 
  <td width='5%' bgcolor=`'$color`' align='center'>$percentFree</td> 
  </tr> 
" 
Add-Content $diskReport $dataRow; 
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree"; 
    $i++   
  } 
 } 
} 

# Create table at end of report showing legend of colors for the critical and warning 
 $tableDescription = " 
 </table><br><table width='20%'> 
 <tr bgcolor='White'> 
    <td width='10%' align='center' bgcolor='#FBB917'>Warning less than 15% free space</td> 
 <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td> 
 </tr> 
" 
  Add-Content $diskReport $tableDescription 
 Add-Content $diskReport "</body></html>" 

# Send Notification if alert $i is greater then 0 
if ($i -gt 0) 
{ 
    foreach ($user in $users) 
{ 
        Write-Host "Sending Email notification to $user" 

  $smtpServer = "MySMTPServer" 
  $smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
  $msg = New-Object Net.Mail.MailMessage 
  $msg.To.Add($user) 
        $msg.From = "[email protected]" 
  $msg.Subject = "Environment DiskSpace Report for $titledate" 
        $msg.IsBodyHTML = $true 
        $msg.Body = get-content $diskReport 
  $smtp.Send($msg) 
        $body = "" 
    } 
  } 
0