Question
foreach
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 14 ans 1 mois #11536
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 ....
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).\"
}
}
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 ....
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: (
+ 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.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
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]
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.
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
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.
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- foreach