Je me demandais s'il y avait un moyen simple de déclencher une alerte par courrier électronique sur Windows Server 2008 lorsque les partitions de disque logique manquent d'espace. J'ai 2 serveurs SQL qui ont failli manquer d'espace disque à cause des fichiers journaux DB.
Merci, Ryan
Une façon simple d'obtenir que Windows Server 2008 envoie des alertes par courrier électronique à faible espace disque consiste à utiliser le Planificateur de tâches et le journal système. Si l'espace libre tombe en dessous du pourcentage spécifié dans HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\ DiskSpaceThreshold , un événement est enregistré dans le journal système qui peut déclencher une tâche pour envoyer un e-mail message.
J'ai ajouté la surveillance de l'espace disque via snmp à mon instance (séparée) de nagios.
Pourquoi n'exécutez-vous pas un script powershell comme tâche de planification tous les jours? Si le script trouve que l'espace libre du disque est inférieur à 10%, il vous enverra un e-mail ou une notification.
voici un exemple de code pour vérifier l'espace libre des disques:
Get-Content ForEach-Object {$ ; Get-WMIObject –computername $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ . DeviceID; $. FreeSpace/1GB}}
Les deux exemples ne fonctionnent pas en raison d'une syntaxe PowerShell incorrecte. Le code suivant répertorie les tailles de volume de l'hôte actuel (à l'aide de PowerShell 5.0):
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
Le code suivant répertorie les tailles de volume des hôtes répertoriés dans server.txt:
Get-Content server.txt | %{ Get-WMIObject –computername $_ Win32_LogicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } }
Notez que le support d'espace extérieur $_
énumère les adresses des serveurs tandis que l'espace réservé intérieur $_
énumère les périphériques. C'est un piège fréquent pour les débutants PowerShell. Si vous souhaitez utiliser l'adresse du serveur dans la boucle interne, vous devez l'assigner à une nouvelle variable dans la boucle externe.
Le logiciel de forum utilisé ici est défectueux. Dans les aperçus de publication, il affiche $_
correctement en tant que $_
même s'il n'est pas échappé en tant que code. Mais la publication finale supprime le trait de soulignement, ce qui rend les exemples PowerShell incorrects.
Vous pouvez utiliser ce script pour envoyer un e-mail à l'aide de votre serveur de messagerie. Remplacez simplement le nom du nom du serveur smtp par celui de votre serveur. Si sur la même machine, utilisez "localhost" (le serveur smtp doit être fonctionnel). Le script se trouve également ici: https://gallery.technet.Microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65
Une fois le script enregistré sur le disque local, il peut être facilement exécuté à l'aide de PowerShell et testé. Une fois que le script semble fonctionner correctement, il peut être planifié pour s'exécuter tous les jours ou toutes les heures en fonction des besoins à l'aide du planificateur de tâches Windows. Cet article explique comment exécuter un script à l'aide du planificateur de tâches. 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 = ""
}
}