Question [Script] Monitoring Espace Libre

Plus d'informations
il y a 11 ans 10 mois #5511 par Alan Pinard
Bonjour,

Voici un script qui monitore l'espace disque restant sur des serveur distants. Il envoie une alerte de notification basée sur un paramètre en pourcentage d'espace restant.

Un autre de plus!

[code:1]

#FreeSpace_Monitoring.ps1
#Powershell V1
#
#Auteur: Alan Pinard
#Date: 21-10-2009
#Modfi Date: 21-10-2009
#Description:
# Script qui vérifie si l'espace disque libre est inférieur à \"PercentFreeSpaceAlert\".Si oui, il envoie une alerte
# par courriel spécifier dans \"Users\". Ce script utilise WMI pour ce connecter et faire la vérification
#Param:
# PercentFreeSpaceAlert : Indicateur sur lequel l'alerte est basée (pourcentage de l'espace restant)
# SmtpServer : Serveur SMTP
# Users : Compte de courriel que l'on doit notifier
# EmailFrom : Courriel du quel provient l'alerte
# Computers : Ordinateur sur lesquels la vérification ce fera
#
########################################################

$DDate = Get-Date -Format g
[int]$PercentFreeSpaceAlert = 90
$SmtpServer = \"smtp.domain.com\"
$Users = @(\"user1@domain.com\",\"user2@domain.com\")
$EmailFrom = \"lowdiskspace@domain.com\"
$Computers = @(\"computer1\",\"computer2\")

########################################################
$Body = (\"Hostname\").PadRight(15) + \"`t\" + (\"Name\").PadRight(15) + \"`t\" + (\"Size\").PadRight(15) + \"`t\" + (\"FreeSpace\").PadRight(15) + \"`tPourcent`n\"
$Body += \"
`n\"
$StringInitialCount = $Body.Length

ForEach ($Computer in $Computers) {

$Drives = Get-WmiObject -ComputerName $computer Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
$Drives -as [PSOBject] | Out-Null

$Drives | Add-Member NoteProperty VAFreeSpaceGb \"\" -PassThru | Out-Null
$Drives | Add-Member NoteProperty VASizeGb \"\" -PassThru | Out-Null
$Drives | Add-Member NoteProperty VAPourcentFree \"\" -PassThru | Out-Null
$Drives | Add-Member NoteProperty VAComputer \"\" -PassThru | Out-Null

$Drives | ForEach{

$_.VASizeGB = [Math]::Round($_.Size/1Gb,2)
$_.VAFreeSpaceGb = [Math]::Round($_.FreeSpace/1Gb,2)
$_.VAPourcentFree = [math]::Round(([Double]$_.FreeSpace/[Double]$_.Size) * 100)
$_.VAComputer = $Computer

###################################################

If ($_.VAPourcentFree -lt $PercentFreeSpaceAlert){
$Body += $_.VAComputer.PadRight(15) + \"`t\" + $_.Name.PadRight(15) + \"`t\" + ($_.VASizeGB.ToString()).PadRight(15) + \"`t\" + ($_.VAFreeSpaceGB.ToString()).PadRight(15) + \"`t\" + ($_.VAPourcentFree).ToString() + \"%`n\"

}
}
}
####################################################

If ($Body.length -gt $StringInitialCount) {

ForEach ($User in $Users) {

Write-Host -ForegroundColor Cyan \"Sending Email notification to $user\"
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer)
$Subject = \"[Alerts] Low Disk space - Less than $PercentFreeSpaceAlert % free space - $DDate\"

$Smtp.Send($EmailFrom,$User,$Subject,$Body)
}
}
[/code:1]

Si cela peut aider quelqu'un.

Alan Pinard
Version A

Message édité par: Versiona, à: 21/10/09 23:13

Message édité par: Versiona, à: 3/11/09 15:57

Message édité par: Versiona, à: 26/08/11 16:00<br><br>Message édité par: Versiona, à: 26/08/11 16:10

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #5512 par Laurent Dardenne
Salut,
sous XP sp3 la ligne suivante
[code:1] $_.VAPourcentFree = [math]::Round(($_.FreeSpace/$_.Size) * 100)[/code:1]
Provoque l'erreur :

L'opération « [System.UInt64] / [System.UInt64] » n'est pas définie.

Je dois faire :
[code:1]
$_.VAPourcentFree = [math]::Round(([Double]$_.FreeSpace/[Double]$_.Size) * 100)[/code:1]
cause :

Uint64 is not a Managed type so not much functionality implemented (.net 3.0
has BigInteger )

Greetings /\/\o\/\/


Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #5518 par Alan Pinard
Bonjour Laurent,

Merci pour l'information,j'avais testé le script sur Windows Vista et 7 en 64 Bits.

La prochaine fois je testerai sur Windows XP!

Alan Pinard
Version A

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 3 semaines #10134 par yahway
Réponse de yahway sur le sujet Re:[Script] Monitoring Espace Libre
Bonjour,

désolé de déterrer ce sujet, mais j'ai une erreur générée par $i++ à la fin du script.

L'opérateur « ++ » ne fonctionne que sur des nombres. L'opérande est un « System.String ».
Au niveau de D:\Scripts\Powershell\Taille Disk\Get-TailleDisk.ps1 : 33 Caractère : 18
+ $i++ &lt;&lt;&lt;&lt;
+ CategoryInfo : InvalidOperation: (name:String) [], RuntimeException
+ FullyQualifiedErrorId : OperatorRequiresNumber

Par avance merci de votre aide.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 3 semaines #10135 par Alan Pinard
Bonjour Yahway,

Je te reviens avec une solution d'ici heure.

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 3 semaines #10136 par Alan Pinard
C'est bon, j'ai corrigé le code en suivant la recommandation de Laurent.

De mon côté, je l'ai testé sur un Windows XP SP3 Powershell V2 + Framework .NEt 2.0 SP2.

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.110 secondes
Propulsé par Kunena