Question foreach

Plus d'informations
il y a 14 ans 1 mois #11536 par ZOKI
foreach a été créé par ZOKI
Bonjour

j'ai bien avancé sur le formatage des résultats de mon script
j'ai ajouté une fonction ...
Le but du script est le suivant :
scanner les disques (autres que lecteurs cd et lecteur de carte)
si le disque à moins de 85% d'espace disque me prévenir par mail.


j'ai bien progessé mais .... :angry:




Mais le script ne répond pas à ma demande.

en effet, le résultat attendu par mon script me laisse perplexe.
Si j'ai un seul disque, cela fonctionne. si j'ai plusieurs disques cela ne fonctionne pas.

erreur étonnante
message : Tentative de division par zéro.
Au niveau de C:\scripts\if.ps1 : 20 Caractère : 28
+ $Dispo = ($disk.FreeSpace / <<<< $disk.Size)
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException

L'espace disponible sur le disque () est suffisant (4700 % soit 0 Go).
L'espace disponible sur le disque () est suffisant (4700 % soit 0 Go).



c'est le foreach qui pose pb ?


voici le script :

cls
$exp = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$tech = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$smtp = 'smtp.orange.fr'

function rapport

{
Send-Mailmessage -to $tech -from $exp -subject 'Espace disponible insuffisant' -body \"le disque $Volume ($Device) est sature. L'espace disponible est de $FreeSpace Go\" -smtpserver $smtp
}

$Disk = Get-WmiObject win32_logicaldisk | where-object {$_.size -ne $null}

$Device = $Disk.DeviceID
$Volume = $disk.VolumeName

$FreeSpace = $disk.FreeSpace/1Gb
$FreeSpace = [Math]::Round($FreeSpace,2)


$Dispo = ($disk.FreeSpace / $disk.Size)
$Dispo = [Math]::Round($Dispo,2)*100
$limit = 15


foreach ($element in $disk)

{
if ($dispo -lt $limit)
{
rapport
}
else
{
Write-Host \"L'espace disponible sur le disque $Device ($Volume) est suffisant ($Dispo % soit $FreeSpace Go).\"
}
}

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

Plus d'informations
il y a 14 ans 1 mois #11537 par SiSMik
Réponse de SiSMik sur le sujet Re:foreach
Le problème vient de ta fonction et de ton foreach ou tu n'apelles pas l'objet.
Vite fait un petit code ci dessous, sans avoir testé.

[code:1]function rapport {
param ([string]$tech,[string]$exp,[string]$volume,[string]$Device,[string]$free,[string]$smtp)
Send-Mailmessage -to $tech -from $exp -subject 'Espace disponible insuffisant' -body \"le disque $Volume ($Device) est sature. L'espace disponible est de $FreeSpace Go\" -smtpserver $smtp
}

Get-WmiObject win32_logicaldisk | where-object {$_.size -ne $null} | % {

$Device = $_.DeviceID
$Volume = $_.VolumeName
$FreeSpace = $_.FreeSpace/1Gb
$FreeSpace = [Math]::Round($FreeSpace,2)
$Dispo = ($FreeSpace/ $_.Size)
$Dispo = [Math]::Round($Dispo,2)*100
$limit = 15

if ($dispo -lt $limit) {
rapport -tech 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.' -exp 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.' -volume $Volume -device $Device -free $FreeSpace -smtp 'smtp.orange.fr'
}
else
{
Write-Host \"L'espace disponible sur le disque $Device ($Volume) est suffisant ($Dispo % soit $FreeSpace Go).\"
}
}[/code:1]

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

Plus d'informations
il y a 14 ans 1 mois #11544 par ZOKI
Réponse de ZOKI sur le sujet Re:foreach
Merci Benduru.
Ton script fonctionne parfaitement. Je suis déçu car mes connaissances ne sont pas encore suffisantes pour appréhender ce genre d'erreur. Jamais je n'aurais pensé à cela. Encore une fois merci.

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

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