Question
Passage de variable
- lafont
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 7
- Remerciements reçus 0
je cherche a peaufiner le script suivant:
[code:1]# Calcul et alerte espace disque
param ($computer = \".\", [switch]$total)
# $file = new-item \"C:\Script\du.txt\" -type file -force
# récupérer tous les disques logiques de l'ordinateur:
get-wmiobject -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} |
tee-object -variable disques |
select-object @{e={$_.systemname};n=\"Machine\"}
@{e={$_.name};n=\"Disque\"}
@{e={[math]::round($_.freespace/1GB,1)};n=\"Disponible (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"},
@{e={[math]::round(($disques|measure-object freespace -sum).sum/1GB,1)};n=\" Espace disponible\"}|Out-File \"C:\Script\du.txt\" -width 55
# Récupération de la valeur \"espace disponible\" dans une variable
$var =
# Traitement du mail
$nom = hostname
$expediteur = \"titi.com\"
$destinataire = \"toto.com\"
$serveur = \"tutu.com\"
$fichier = \"C:\Script\du.txt\"
$objet = \"Monitoring Disques de \" + $nom + \" du \" + [System.DateTime]::Now
if($var -le '20')
{
$texte = \"Bonjour, veuillez trouver ci-joint l'état des disques, ATTENTION ALERTE C\"
}
else
{
$texte = \"Bonjour, veuillez trouver ci-joint l'état des disques\"
}
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$attachment = new-object System.Net.Mail.Attachment \"C:\Script\du.txt\"
$message.Attachments.Add($attachment)
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)
$Attachment.Dispose()[/code:1]
En fait je souhaite que le corps du mail soit différent si l'espace disque est inférieur ou égal à 20. Pour cela je souhaite que le résultat % de l'epace dispo soit passé à la variable $var.
Une idée ? merci !<br><br>Message édité par: Arnaud, à: 12/11/09 00:24
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
steflaf écrit:
L'usage de la balise code permettrait d'être certains qu'il ne manque pas qq caractères par ci, par là.Une idée ?
Peux-tu m'expliquer l'usage et l'approche de la variable $Disques des lignes suivantes :
[code:1]tee-object -variable disques[/code:1]
et [code:1]@{e={[math]::round((($disques|measure-object freespace -sum).sum/1GB«»),1)};n=\"Espace disponible\"}[/code:1]
Sur mon poste le code suivant renvoit des valeurs différentes de celles contenues dans $Disques :
[code:1]
$computer = \".\"
get-wmiobject -computer $computer win32_logicaldisk |
where {$_.drivetype -eq 3} |
tee-object -variable disques |
select-object @{e={$_.systemname};n=\"Machine\"},
@{e={$_.name};n=\"Disque\"},
@{e={[math]::round(($_.freespace/1GB«»),1)};n=\"Disponible (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"},
@{e={[math]::round((($disques|measure-object freespace -sum).sum/1GB«»),1)};n=\"Espace disponible\"}
[/code:1]
cf. le champ \"Disponible (Go)\"(select-object)et \"FreeSpace\" (WMI)
steflaf écrit:
Je ne sais pas si ici ta notion d'espace disponible est lié à l'ensemble des disques d'une machine ou pour chaque disque d'une machine.En fait je souhaite que le corps du mail soit différent si l'espace disque est inférieur ou égal à 20.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Après vérification, les valeurs renvoyées sont correctes, c'est juste une question d'arrondi.Sur mon poste le code suivant renvoit des valeurs différentes de celles contenues dans $Disques :
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- lafont
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 7
- Remerciements reçus 0
Salut,
steflaf écrit:L'usage de la balise code permettrait d'être certains qu'il ne manque pas qq caractères par ci, par là.Une idée ?
Peux-tu m'expliquer l'usage et l'approche de la variable $Disques des lignes suivantes :
[code:1]tee-object -variable disques[/code:1]
et [code:1]@{e={[math]::round((($disques|measure-object freespace -sum).sum/1GB«»),1)};n=\"Espace disponible\"}[/code:1]
Sur mon poste le code suivant renvoit des valeurs différentes de celles contenues dans $Disques :
[code:1]
$computer = \".\"
get-wmiobject -computer $computer win32_logicaldisk |
where {$_.drivetype -eq 3} |
tee-object -variable disques |
select-object @{e={$_.systemname};n=\"Machine\"},
@{e={$_.name};n=\"Disque\"},
@{e={[math]::round(($_.freespace/1GB«»),1)};n=\"Disponible (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"},
@{e={[math]::round((($disques|measure-object freespace -sum).sum/1GB«»),1)};n=\"Espace disponible\"}
[/code:1]
cf. le champ \"Disponible (Go)\"(select-object)et \"FreeSpace\" (WMI)
steflaf écrit:Je ne sais pas si ici ta notion d'espace disponible est lié à l'ensemble des disques d'une machine ou pour chaque disque d'une machine.En fait je souhaite que le corps du mail soit différent si l'espace disque est inférieur ou égal à 20.
La notion d'espace dispo n'est valable que pour les disques systèmes (généralement C)
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
D'accord.La notion d'espace dispo n'est valable que pour les disques systèmes (généralement C)
Et pour ces questions ?
Laurent Dardenne écrit:
Peux-tu m'expliquer l'usage et l'approche de la variable $Disques des lignes suivantes :
[code:1]tee-object -variable disques[/code:1]
et [code:1]@{e={[math]::round((($disques|measure-object freespace -sum).sum/1GB«»),1)};n=\"Espace disponible\"}[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
cls
rv disques
$computer = \".\"
get-wmiobject -computer $computer win32_logicaldisk |
where {$_.drivetype -eq 3} |
tee-object -variable disques |
Foreach-Object -begin {write-host \"[BEGIN] Disques exist ? $(test-path variable:disques)\" }`
-Process {write-host \"[PROCESS] Disques exist ? $(test-path variable:disques)\" }`
-end {write-host \"[END] Disques exist ? $(test-path variable:disques)\" }
# [BEGIN] Disques exist ? False
# [PROCESS] Disques exist ? False
# [PROCESS] Disques exist ? False
# [END] Disques exist ? True
[/code:1]
Je ne trouves pas d'intérêt à ton usage de Tee-Object.
Un traitement en deux passes pourra t'aider à récupérer l'info recherchée.
[code:1]$Disques=get-wmiobject -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3}
$Result=$Disques|select-object @{e={$_.systemname};n=\"Machine\"},
@{e={$_.name};n=\"Disque\"},
@{e={[math]::round($_.freespace/1GB,1)};n=\"Disponible (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"},
@{e={[math]::round(($disques|measure-object freespace -sum).sum/1GB,1)};n=\"Espace disponible\"}
$Result[0].\"Espace disponible\"[/code:1]
Reste que j'ai un peu de mal à comprendre la création du membre \"Espace disponible\"...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Passage de variable