Je me demandais s'il y avait un moyen facile de déclencher une alerte par e-mail 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
Réponses:
Un moyen simple pour 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 message électronique.
la source
powershell
le programme et les éléments suivants pour les arguments:-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}
J'ai ajouté la surveillance de l'espace disque via snmp à mon instance (séparée) de nagios.
la source
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 –nomordinateur $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
la source
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):
Le code suivant répertorie les tailles de volume des hôtes répertoriés dans server.txt :
Sidenote
Notez que l'espace
$_
réservé externe énumère les adresses de serveur tandis que l'espace$_
réservé interne é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 s'affiche
$_
correctement comme un$_
code, même s'il n'est pas échappé. Mais la publication finale supprime le trait de soulignement, ce qui rend les exemples PowerShell incorrects.la source
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
mais étant un débutant PS, je ne comprends pas très bien quelle serait la prochaine étape pour automatiser cela (par exemple, comment prendrait-on la sortie de la première commande et si le le lecteur était en dessous d'un certain seuil d'espace, connectez une commande PS pour envoyer et envoyer un courrier électronique. Je vois que le courrier électronique peut être envoyé à partir d'un message par boadad ci-dessus en utilisant,-command &{send-mailmessage ...
mais je ne sais pas comment câbler le vôtre avec une logique qui dicte que l'espace est faible, le courrier doit être envoyé Thx.Vous pouvez utiliser ce script pour envoyer un e-mail à l'aide de votre serveur de messagerie. Remplacez simplement le 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
la source
J'ai corrigé le script. Il suffit de créer un fichier texte nommé par exemple server.txt et d'inclure l'adresse IP ou les noms de serveurs et vous pouvez ensuite exécuter le script suivant
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
Cordialement, Luis.
la source
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
la source