Question
Introduire plusieurs variables depuis un .csv
- Renard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 3
- Remerciements reçus 0
Voila je rencontre une difficulté lors de la création de mon script.
Celui-ci a pour but de scanner les lecteurs des serveurs compris dans un fichier .csv, et d'afficher le pourcentage d'espace disque libre pour chaque partition, avec également un code couleur en fonction du pourcentage.
En revanche, je bloque sur un point relativement important. Je souhaite pouvoir renseigner le quota limite d'espace disque a remonter pour chaque partition de chaque serveur. Et c'est sur ce point que je bloque.
Je souhaite donc pouvoir donner dans le fichier .CSV un chiffre entre 0 et 100 représentant le quota d'espace libre qu'il ne faut pas atteindre, et ce pour chaque partition.
Le fichier .csv est constitué des noms de pc les un a la suite des autres comme ceci :
[code:1]firstserveur
secondserveur
lastserveur[/code:1]
Et je souhaiterais rajouter les quotas comme suit :
[code:1]firstserveur;c;20
firstserveur;d;15
secondserveur;c;30
secondserveur;d;40
secondserveur;f;5
lastserveur;c;20
lastserveur;f;20[/code:1]
ou \"c;20\" est une valeur qui représente la lettre de la partition et 20 le pourcentage d'espace libre a ne pas depasser.
[code:1]# Change the following variables based on your environment
$html_file_dir = \".\spacelog\"
#$server_file = \"D:\computerlistall.txt\"
$server_file = \".\Computertab.csv\"
$from_address = \"l'adressemail@truc.com\"
$to_address = \"l'adressemail@truc.com\"
$email_gateway = \"serveursmtp@truc.com\"
$smtp_user = \"\"
$smtp_pass = \"\"
$background_color = \"rgb(140,166,193)\"
$server_name_font = \"Arial\"
$server_name_font_size = \"14px\"
$server_name_bg_color = \"rgb(77,108,145)\"
$heading_font = \"Arial\"
$heading_font_size = \"12px\"
$heading_name_bg_color = \"rgb(95,130,169)\"
$data_font = \"Arial\"
$data_font_size = \"10px\"
# Colors for space
$very_low_space = \"rgb(255,0,0)\"
$low_space = \"rgb(249,124,0)\"
$medium_space = \"rgb(251,251,0)\"
# Quota for each drives
$quota = 60
$lowquota = $quota/2
$verylowquota = $quota/4
# Define some variables
$ErrorActionPreference = \"SilentlyContinue\"
#$date = Get-Date -UFormat \"%d/%m/%Y /%z\"
$date =(Get-Date).ToString()
$html_file = New-Item -ItemType File -Path \"$html_file_dir\diskspace_.html\" -Force
# Create the file
$html_file
# Function to be used to convert bytes to MB or GB or TB
Function ConvertBytes {
param($size)
If ($size -lt 1MB«») {
$drive_size = $size / 1KB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' KB'
}elseif ($size -lt 1GB«»){
$drive_size = $size / 1MB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' MB'
}ElseIf ($size -lt 1TB«»){
$drive_size = $size / 1GB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' GB'
}Else{
$drive_size = $size / 1TB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' TB'
}
}
# Create the header and footer contents of the html page for output
$html_header = '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html lang=\"en-US\" xml:lang=\"en-US\" xmlns=\"www.w3.org/1999/xhtml\">
<head>
<title>Espace disque serveur</title>
<style type=\"text/css\">
.serverName { text-align:center; font-family:\"' + $server_name_font + '\"; font-size:' + $server_name_font_size + `
'; font-weight:bold; background-color: ' + $server_name_bg_color + '; border: 1px solid black; width: 150px; }
.headings { text-align:center; font-family:\"' + $heading_font + '\"; font-size:' + $heading_font_size + `
'; font-weight:bold; background-color: ' + $heading_name_bg_color + '; border: 1px solid black; width: 150px; }
.data { font-family:\"' + $data_font + '\"; font-size:' + $data_font_size + '; border: 1px solid black; width: 150px; }
#dataTable { border: 1px solid black; border-collapse:collapse; }
body { background-color: ' + $background_color + '; }
#legend { border: 1px solid black; position:absolute; left:800px; top:10px; }
#legend2 { border: 1px solid black; position:absolute; left:800px; top:120px; }
</style>
<script language=\"JavaScript\" type=\"text/javascript\">
<!--
function zxcWWHS(){
if (document.all){
zxcCur=''hand'';
zxcWH=document.documentElement.clientHeight;
zxcWW=document.documentElement.clientWidth;
zxcWS=document.documentElement.scrollTop;
if (zxcWH==0){
zxcWS=document.body.scrollTop;
zxcWH=document.body.clientHeight;
zxcWW=document.body.clientWidth;
}
}
else if (document.getElementById){
zxcCur=''pointer'';
zxcWH=window.innerHeight-15;
zxcWW=window.innerWidth-15;
zxcWS=window.pageYOffset;
}
zxcWC=Math.round(zxcWW/2);
return [zxcWW,zxcWH,zxcWS];
}
window.onscroll=function(){
var img=document.getElementById(''legend'');
if (!document.all){ img.style.position=''fixed''; window.onscroll=null; return; }
if (!img.pos){ img.pos=img.offsetTop; }
img.style.top=(zxcWWHS()[2]+img.pos)+''px'';
}
//-->
</script>
</head>
<body>'
$html_footer = '</body>
</html>'
# Start to create the reports file
Add-Content $html_file $html_header
Get-Content $server_file | where {($_ -ne \"\"«») -and (Test-Connection $_ -quiet -count 2)} |
ForEach-Object {
# Get the hostname of the machine
$hostname = Get-WmiObject -Impersonation Impersonate -ComputerName $_ -Query \"SELECT Name From Win32_ComputerSystem\"
$name = $hostname.Name.ToUpper()
# Get the drives of the server
$drives = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName $_ -Impersonation Impersonate
ForEach ($drive in $drives) {
$free_space = $drive.FreeSpace
$size = $drive.size
If (($free_space/$size)*100 -le $quota) {
$space_color = \"\"
$ratio_color = \"\"
$free_space = $drive.FreeSpace
$size = $drive.size
If ($free_space -le 10737418240) {
$space_color = $very_low_space
}If (($free_space/$size)*100 -le $verylowquota) {
$ratio_color = $very_low_space
}elseif (($free_space/$size)*100 -le $lowquota) {
$ratio_color = $low_space
}elseif (($free_space/$size)*100 -le $quota) {
$ratio_color = $medium_space
}
Add-Content $html_file ('<Table id=\"dataTable\"><tr><td colspan=\"5\" class=\"serverName\">' + $name + '</td></tr>
<tr><td class=\"headings\">Lettre du lecteur</td><td class=\"headings\">Taille totale</td><td class=\"headings\">Espace libre</td><td class=\"headings\">% libre</td><td class=\"headings\">Quota cible</td></tr>')
Add-Content $html_file ('<tr><td class=\"data\">' + $drive.deviceid + '</td><td class=\"data\">' + (ConvertBytes $drive.size) + `
'</td><td class=\"data\" bgcolor=\"' + $space_color + '\">' + (ConvertBytes $drive.FreeSpace) +
'</td><td class=\"data\" bgcolor=\"' + $ratio_color + '\">' + '{0:N0}' -f(($drive.FreeSpace/$drive.size*100),\"%\"«») + '</td><td class=\"data\">' + $quota.deviceid + '</td></tr>')
}
}
# Close the table
Add-Content $html_file ('</table></br><div id=\"legend\">
<Table><tr><td style=\"font-size:12px\">Espace disque restant de moins de 10GB</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre de moins de ' + $verylowquota + ' pourcents</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre de moins de ' + $lowquota + ' pourcents</td><td bgcolor=\"' + $low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre de moins de ' + $quota + ' pourcents</td><td bgcolor=\"' + $medium_space + '\" width=\"10px\"></td></tr>
</table></div>')
}
# End the reports file
Add-Content $html_file $html_footer
# Email the file
$mail = New-Object System.Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($html_file)
$mail.From = $from_address
$mail.To.Add($to_address)
$mail.Subject = \"Espace disque sur serveurs le $date\"
$mail.Body = \"En PJ le rapport d'espace disque du $date\"
$mail.Attachments.Add($att)
$smtp = New-Object System.Net.Mail.SmtpClient($email_gateway)
#$smtp.Credentials = New-Object System.Net.NetworkCredential($smtp_user,$smtp_pass)
$smtp.Send($mail)
$att.Dispose()
# Delete the file
#Remove-Item $html_file[/code:1]
J'ai fixé le quota ici a 60% , le fichier csv se trouve a la racine du script sous le nom de \"Computertab.csv\".
Pouvez vous m'aiguiller sur la methode a utiliser ? Est-ce que mon modele .csv peut etre compatible? sinon lequel ?
Merci a vous
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
oui ce forum est la pour ça !Pouvez vous m'aiguiller sur la methode a utiliser ?
oui si ton fichier est formaté pour ça : la premiere ligne doit contenir le nom de chaque colonne avec le separateur(delimiter) que les autres lignesEst-ce que mon modele .csv peut etre compatible?
soit : serveur;lecteur;quota
tu doit utilisé import-csv avec -delimiter \";\" à la place get-content et dans la boucle qui suit modifier les $_ en $_.serveur pour le nom du serveur
et supprimer la boucle drives
et remplacer [code:1]$drives = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName $_.serveur -Impersonation Impersonate[/code:1]par
[code:1]$drives = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName $_.serveur -Impersonation Impersonate | where {$_.DeviceID -eq $_.lecteur+\":\"}[/code:1]
et enfin tu va remplir $quota avec $_.quota au début de la boucle
attention avec ces modif tu va te retrouver a supervisé que les lecteurs du fichier csv
il faudra peut etre faire une amélioration pour géré les lecteurs absent du fichier<br><br>Message édité par: 6ratgus, à: 2/03/15 16:24
Connexion ou Créer un compte pour participer à la conversation.
- Renard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 3
- Remerciements reçus 0
J'ai effectué les modifications que tu m'as dis , et effectivement comme je m'en doutais cela se passe bien mieux avec le import-csv que le get-content.
Mais il m'arrive deux trois erreurs.
Impossible de supprimer la boucle foreach ($drive in $drives) , sinon j'ai une piece jointe vide.
Lorsque j'inclue le pipe \"| where {$_.DeviceID -eq $_.lecteur+\":\"}\" sur le getwmiobject , j'ai egalement un fichier vide.
Je ne suis pas sur que dans ce pipe il sache reprendre $_.lecteur+\":\" correctement car en faisant des tests, je ne chope aucune égalité entre le $_.lecteur+: et le $_.DeviceID alors que ça devrait bien etre le cas.
Du coup j’obtiens un fichier sans ces deux points qui est pas loin d'etre correct :
FR06249761D
Lettre du lecteur Taille totale Espace libre % libre Quota cible
C: 148.8 GB 74.27 GB 50 80
FR06249761D
Lettre du lecteur Taille totale Espace libre % libre Quota cible
D: 148.8 GB 92.32 GB 62 80
Espace disque restant de moins de 10GB
Pourcentage libre inferieur de 4 fois au quota cible
Pourcentage libre inferieur de 2 fois au quota cible
Pourcentage libre inferieur au quota cible
FR06249761D
Lettre du lecteur Taille totale Espace libre % libre Quota cible
C: 148.8 GB 74.27 GB 50 70
FR06249761D
Lettre du lecteur Taille totale Espace libre % libre Quota cible
D: 148.8 GB 92.32 GB 62 70
Voici un test sur mon pc :
L'erreur est donc qu'il traite deux fois la même chose, mais avec un quota cible différent:
Une fois les deux lecteurs avec un premier quota , une seconde les deux lecteurs avec un second quota.
Le pipe que tu m'as demandé de rajouter devrait resoudre ce probleme, mais impossible de le faire marcher malheuresement.
Voici mon code en l'etat :
[code:1]# Variables
$html_file_dir = \".\spacelog\"
#$server_file = \"D:\computerlistall.txt\"
$server_file = \".\Computertab.csv\"
$from_address = \"...\"
$to_address = \"...\"
$email_gateway = \"...\"
$smtp_user = \"\"
$smtp_pass = \"\"
$background_color = \"rgb(200,200,200)\"
$server_name_font = \"Arial\"
$server_name_font_size = \"14px\"
$server_name_bg_color = \"rgb(120,160,190)\"
$heading_font = \"Arial\"
$heading_font_size = \"12px\"
$heading_name_bg_color = \"rgb(140,180,210)\"
$data_font = \"Arial\"
$data_font_size = \"10px\"
# Colors for space
$very_low_space = \"rgb(255,0,0)\"
$low_space = \"rgb(249,124,0)\"
$medium_space = \"rgb(251,251,0)\"
# Quota for each drives
# Quota a fixer dans le ficher csv pour chaque partition
# $_.quota = 60
$space_free = 10737418240
# Define some variables
$ErrorActionPreference = \"SilentlyContinue\"
#$date = Get-Date -UFormat \"%d/%m/%Y /%z\"
$date =(Get-Date).ToString()
$html_file = New-Item -ItemType File -Path \"$html_file_dir\diskspace_.html\" -Force
# Create the file
$html_file
# Function to be used to convert bytes to MB or GB or TB
Function ConvertBytes {
param($size)
If ($size -lt 1MB«») {
$drive_size = $size / 1KB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' KB'
}elseif ($size -lt 1GB«»){
$drive_size = $size / 1MB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' MB'
}ElseIf ($size -lt 1TB«»){
$drive_size = $size / 1GB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' GB'
}Else{
$drive_size = $size / 1TB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' TB'
}
}
# Create the header and footer contents of the html page for output
$html_header = '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html lang=\"en-US\" xml:lang=\"en-US\" xmlns=\"www.w3.org/1999/xhtml\">
<head>
<title>Espace disque serveur</title>
<style type=\"text/css\">
.serverName { text-align:center; font-family:\"' + $server_name_font + '\"; font-size:' + $server_name_font_size + `
'; font-weight:bold; background-color: ' + $server_name_bg_color + '; border: 1px solid black; width: 150px; }
.headings { text-align:center; font-family:\"' + $heading_font + '\"; font-size:' + $heading_font_size + `
'; font-weight:bold; background-color: ' + $heading_name_bg_color + '; border: 1px solid black; width: 150px; }
.data { font-family:\"' + $data_font + '\"; font-size:' + $data_font_size + '; border: 1px solid black; width: 150px; }
#dataTable { border: 1px solid black; border-collapse:collapse; }
body { background-color: ' + $background_color + '; }
#legend { border: 1px solid black; position:absolute; left:800px; top:10px; }
#legend2 { border: 1px solid black; position:absolute; left:800px; top:120px; }
</style>
<script language=\"JavaScript\" type=\"text/javascript\">
<!--
function zxcWWHS(){
if (document.all){
zxcCur=''hand'';
zxcWH=document.documentElement.clientHeight;
zxcWW=document.documentElement.clientWidth;
zxcWS=document.documentElement.scrollTop;
if (zxcWH==0){
zxcWS=document.body.scrollTop;
zxcWH=document.body.clientHeight;
zxcWW=document.body.clientWidth;
}
}
else if (document.getElementById){
zxcCur=''pointer'';
zxcWH=window.innerHeight-15;
zxcWW=window.innerWidth-15;
zxcWS=window.pageYOffset;
}
zxcWC=Math.round(zxcWW/2);
return [zxcWW,zxcWH,zxcWS];
}
window.onscroll=function(){
var img=document.getElementById(''legend'');
if (!document.all){ img.style.position=''fixed''; window.onscroll=null; return; }
if (!img.pos){ img.pos=img.offsetTop; }
img.style.top=(zxcWWHS()[2]+img.pos)+''px'';
}
//-->
</script>
</head>
<body>'
$html_footer = '</body>
</html>'
# Start to create the reports file
Add-Content $html_file $html_header
<#Get-Content $server_file | where {($_ -ne \"\"«») -and (Test-Connection $_ -quiet -count 2)} |#>
import-csv -delimiter \";\" $server_file |
ForEach-Object {
If (($_.serveur).trim() -ne \"\"«») {
If (Test-Connection $_.serveur -quiet -count 2) {
# Get the hostname of the machine
$hostname = Get-WmiObject -Impersonation Impersonate -ComputerName $_.serveur -Query \"SELECT Name From Win32_ComputerSystem\"
$name = $hostname.Name.ToUpper()
# Get the drives of the server
$drives = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName $_.serveur -Impersonation Impersonate
#| where {$_.DeviceID -eq $_.lecteur+\":\"}
$lowquota = $_.quota/2
$verylowquota = $_.quota/4
ForEach ($drive in $drives) {
$free_space = $drive.FreeSpace
$size = $drive.size
If (($free_space/$size)*100 -le $_.quota) {
$space_color = \"\"
$ratio_color = \"\"
If ($free_space -le $space_free) {
$space_color = $very_low_space
}If (($free_space/$size)*100 -le $verylowquota) {
$ratio_color = $very_low_space
}elseif (($free_space/$size)*100 -le $lowquota) {
$ratio_color = $low_space
}elseif (($free_space/$size)*100 -le $_.quota) {
$ratio_color = $medium_space
}
Add-Content $html_file ('<Table id=\"dataTable\"><tr><td colspan=\"5\" class=\"serverName\">' + $name + '</td></tr>
<tr><td class=\"headings\">Lettre du lecteur</td><td class=\"headings\">Taille totale</td><td class=\"headings\">Espace libre</td><td class=\"headings\">% libre</td><td class=\"headings\">Quota cible</td></tr>')
Add-Content $html_file ('<tr><td class=\"data\">' + $drive.deviceid + '</td><td class=\"data\">' + (ConvertBytes $drive.size) + `
'</td><td class=\"data\" bgcolor=\"' + $space_color + '\">' + (ConvertBytes $drive.FreeSpace) +
'</td><td class=\"data\" bgcolor=\"' + $ratio_color + '\">' + '{0:N0}' -f(($drive.FreeSpace/$drive.size*100),\"%\"«») + '</td><td class=\"data\">' + $_.quota + '</td></tr>')
}
}
}
}
# Close the table
Add-Content $html_file ('</table></br><div id=\"legend\">
<Table><tr><td style=\"font-size:12px\">Espace disque restant de moins de 10GB</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur de 4 fois au quota cible</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur de 2 fois au quota cible</td><td bgcolor=\"' + $low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur au quota cible</td><td bgcolor=\"' + $medium_space + '\" width=\"10px\"></td></tr>
</table></div>')
}
# End the reports file
Add-Content $html_file $html_footer
# Email the file
$mail = New-Object System.Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($html_file)
$mail.From = $from_address
$mail.To.Add($to_address)
$mail.Subject = \"Espace disque sur serveurs le $date\"
$mail.Body = \"En PJ le rapport d'espace disque du $date\"
$mail.Attachments.Add($att)
$smtp = New-Object System.Net.Mail.SmtpClient($email_gateway)
#$smtp.Credentials = New-Object System.Net.NetworkCredential($smtp_user,$smtp_pass)
$smtp.Send($mail)
$att.Dispose()
# Delete the file
#Remove-Item $html_file[/code:1]
Encore merci a toi cela m'a deja très bien aiguillé
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
oui j'ai fait une erreur de débutant dans la gestion du pipeline dans mon exempleL'erreur est donc qu'il traite deux fois la même chose, mais avec un quota cible différent:
Une fois les deux lecteurs avec un premier quota , une seconde les deux lecteurs avec un second quota.
Le pipe que tu m'as demandé de rajouter devrait resoudre ce probleme, mais impossible de le faire marcher malheuresement.
j'ai refait mon exemple en supprimant les multiples traitement :
[code:1]
$server_file = \"c:\test.csv\"
$fichier = import-csv -delimiter \";\" $server_file
# pour chaque lecteur du fichier
$fichier | where {($_.serveur.trim() -ne \"\"«») -and (Test-Connection $_.serveur -quiet -count 2)} | ForEach-Object {
$serveur = $_.serveur
$lecteur = $($_.lecteur)+\":\"
$drives = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName \"srv-sav\" -Impersonation Impersonate
ForEach ($drive in $drives) {
$quota = 60 # quota par defaut
$present = 0
# cette boucle teste la presence d'un quota pour le lecteur $drive
$fichier | where {$_.serveur -eq $serveur -and $($_.lecteur)+\":\" -eq $drive.DeviceID} | foreach {
$quota = $_.quota # quota du fichier
$present = 1
}
# fait l'action si $drive est le lecteur actuel du fichier ou si $drive est absent du fichier
if ($lecteur -eq $drive.DeviceID -or -not $present) {
write-host \"sur drive $($drive.DeviceID) pour le lecteur $lecteur du serveur $serveur le quota est $quota et present = $present\"
}
}
}[/code:1]
j'ai utilisé un extrait de ton script pour que tu puise facilement l'intégré à ton script
si un lecteur du serveur n'est pas présent dans le fichier (quand $present est égal à zéro), il prend un quota par défaut de 60
et j'ai réactivé le ping au passage
Connexion ou Créer un compte pour participer à la conversation.
- Renard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 3
- Remerciements reçus 0
Voici le script finalisé et fonctionnel :
[code:1]# Variables
$html_file_dir = \"A remplir\"
#$server_file = \"A remplir\"
$server_file = \"A remplir\"
$from_address = \"A remplir\"
$to_address = \"A remplir\"
$email_gateway = \"A remplir\"
$smtp_user = \"\"
$smtp_pass = \"\"
$background_color = \"rgb(200,200,200)\"
$server_name_font = \"Arial\"
$server_name_font_size = \"14px\"
$server_name_bg_color = \"rgb(120,160,190)\"
$heading_font = \"Arial\"
$heading_font_size = \"12px\"
$heading_name_bg_color = \"rgb(140,180,210)\"
$data_font = \"Arial\"
$data_font_size = \"10px\"
# Colors for space
$very_low_space = \"rgb(255,0,0)\"
$low_space = \"rgb(249,124,0)\"
$medium_space = \"rgb(251,251,0)\"
# Quota for each drives
# Quota a fixer dans le ficher csv pour chaque partition
# $_.quota = 60
$space_free = 536870912
# Define some variables
$ErrorActionPreference = \"SilentlyContinue\"
#$date = Get-Date -UFormat \"%d/%m/%Y /%z\"
$date =(Get-Date).ToString()
$html_file = New-Item -ItemType File -Path \"$html_file_dir\diskspace_.html\" -Force
# Create the file
$html_file
# Function to be used to convert bytes to MB or GB or TB
Function ConvertBytes {
param($size)
If ($size -lt 1MB«») {
$drive_size = $size / 1KB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' KB'
}elseif ($size -lt 1GB«»){
$drive_size = $size / 1MB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' MB'
}ElseIf ($size -lt 1TB«»){
$drive_size = $size / 1GB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' GB'
}Else{
$drive_size = $size / 1TB
$drive_size = [Math]::Round($drive_size, 2)
[string]$drive_size + ' TB'
}
}
# Create the header and footer contents of the html page for output
$html_header = '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html lang=\"en-US\" xml:lang=\"en-US\" xmlns=\"www.w3.org/1999/xhtml\">
<head>
<title>Espace disque serveur</title>
<style type=\"text/css\">
.serverName { text-align:center; font-family:\"' + $server_name_font + '\"; font-size:' + $server_name_font_size + `
'; font-weight:bold; background-color: ' + $server_name_bg_color + '; border: 1px solid black; width: 120px; }
.headings { text-align:center; font-family:\"' + $heading_font + '\"; font-size:' + $heading_font_size + `
'; font-weight:bold; background-color: ' + $heading_name_bg_color + '; border: 1px solid black; width: 120px; }
.data { font-family:\"' + $data_font + '\"; font-size:' + $data_font_size + '; border: 1px solid black; width: 125px; }
#dataTable { border: 1px solid black; border-collapse:collapse; }
body { background-color: ' + $background_color + '; }
#legend { border: 1px solid black; position:absolute; left:980px; top:10px; }
#ping { border: 1px solid black; position:absolute; left:680px; top:50px; }
</style>
<script language=\"JavaScript\" type=\"text/javascript\">
<!--
function zxcWWHS(){
if (document.all){
zxcCur=''hand'';
zxcWH=document.documentElement.clientHeight;
zxcWW=document.documentElement.clientWidth;
zxcWS=document.documentElement.scrollTop;
if (zxcWH==0){
zxcWS=document.body.scrollTop;
zxcWH=document.body.clientHeight;
zxcWW=document.body.clientWidth;
}
}
else if (document.getElementById){
zxcCur=''pointer'';
zxcWH=window.innerHeight-15;
zxcWW=window.innerWidth-15;
zxcWS=window.pageYOffset;
}
zxcWC=Math.round(zxcWW/2);
return [zxcWW,zxcWH,zxcWS];
}
window.onscroll=function(){
var img=document.getElementById(''legend'');
if (!document.all){ img.style.position=''fixed''; window.onscroll=null; return; }
if (!img.pos){ img.pos=img.offsetTop; }
img.style.top=(zxcWWHS()[2]+img.pos)+''px'';
}
//-->
</script>
</head>
<body>'
$html_footer = '</body>
</html>'
Add-Content $html_file ('</table></br><div id=\"legend\">
<Table><tr><td style=\"font-size:12px\">Espace disque restant de moins de 500 Mb</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur de 4 fois au quota cible</td><td bgcolor=\"' + $very_low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur de 2 fois au quota cible</td><td bgcolor=\"' + $low_space + '\" width=\"10px\"></td></tr>
<tr><td style=\"font-size:12px\">Pourcentage libre inferieur au quota cible</td><td bgcolor=\"' + $medium_space + '\" width=\"10px\"></td></tr>
</table></div>')
Add-Content $html_file $html_header
$status = 0
<#Get-Content $server_file | where {($_ -ne \"\"«») -and (Test-Connection $_ -quiet -count 2)} |#>
$MonFichier = import-csv -delimiter \";\" $server_file #|
ForEach ($Ligne In $MonFichier) {
If (($Ligne.serveur).trim() -ne \"\"«») {
If (Test-Connection $Ligne.serveur -quiet -count 2) {
# Get the hostname of the machine
$hostname = Get-WmiObject -Impersonation Impersonate -ComputerName $Ligne.serveur -Query \"SELECT Name From Win32_ComputerSystem\"
$name = $hostname.Name.ToUpper()
$lecteur = $_.lecteur+\":\"
# Get the drives of the server
$drive = Get-WmiObject Win32_LogicalDisk -Filter \"drivetype=3\" -ComputerName $Ligne.serveur -Impersonation Impersonate | where {$_.DeviceID -eq \"$($Ligne.lecteur):\"}
$lowquota = $Ligne.quota/2
$verylowquota = $Ligne.quota/4
$free_space = $drive.FreeSpace
$size = $drive.size
If (($free_space/$size)*100 -le $ligne.quota) {
$space_color = \"\"
$ratio_color = \"\"
$status++
If ($free_space -le $space_free) {
$space_color = $very_low_space
}If (($free_space/$size)*100 -le $verylowquota) {
$ratio_color = $very_low_space
}elseif (($free_space/$size)*100 -le $lowquota) {
$ratio_color = $low_space
}elseif (($free_space/$size)*100 -le $ligne.quota) {
$ratio_color = $medium_space
}
Add-Content $html_file ('<Table id=\"dataTable\"><tr><td colspan=\"5\" class=\"serverName\">' + $name + '</td></tr>
<tr><td class=\"headings\">Lettre du lecteur</td><td class=\"headings\">Taille totale</td><td class=\"headings\">Espace libre</td>
<td class=\"headings\">% libre</td><td class=\"headings\">Quota cible</td></tr>')
Add-Content $html_file ('<tr><td class=\"data\">' + $drive.deviceid + '</td><td class=\"data\">' + (ConvertBytes $drive.size) + `
'</td><td class=\"data\" bgcolor=\"' + $space_color + '\">' + (ConvertBytes $drive.FreeSpace) +
'</td><td class=\"data\" bgcolor=\"' + $ratio_color + '\">' + '{0:N0}' -f(($drive.FreeSpace/$drive.size*100),\"%\"«») + '</td><td class=\"data\">' + $ligne.quota + '</td></tr>')
}
#If (($free_space/$size)*100 -gt $ligne.quota) { Add-Content $html_file ('<Table id=\"datatable\"><tr> <td style=\"font-size:12px\"><b> SI vide ,aucun serveur hors quota </b></td></tr>') }
} else { Add-Content $html_file ('<Table id=\"ping\"><tr><td colspan=\"5\" class=\"serverName\">' + $ligne.serveur +
'</td><td style=\"font-size:12px\"><b> Ne ping pas/n existe pas </b></td></tr>')
}
}
# Close the table
}
if ($status -eq 0) {
Add-Content $html_file ('<Table id=\"dataTable\"><tr><td style=\"font-size:20px\"><b> Aucun quota depasse </b></td></tr>')
}
# End the reports file
Add-Content $html_file $html_footer
# Email the file
$mail = New-Object System.Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($html_file)
$mail.From = $from_address
$mail.To.Add($to_address)
$mail.Subject = \"Espace disque sur serveurs le $date\"
$mail.Body = \"En PJ le rapport d'espace disque du $date\"
$mail.Attachments.Add($att)
$smtp = New-Object System.Net.Mail.SmtpClient($email_gateway)
#$smtp.Credentials = New-Object System.Net.NetworkCredential($smtp_user,$smtp_pass)
$smtp.Send($mail)
$att.Dispose()
#}
# Delete the file
#Remove-Item $html_file[/code:1]
Dans le futur donc ce code evoluera tres surement pour lui donner d'autres fonctionnalité de monitoring et de supervision de nos serveurs, comme la supervision de la charge CPU moyenne et l'occupation en espace RAM.
Il en me reste plus qu'a savoir si ce script pourra se declancher a distance sur notre DMZ en ouvrant un port Netbios ou devra t-on le declancher en locale sur chaque serveur en DMZ.
Les versions superieurs de ce script seront présentés ci-dessous. Merci encore a toi.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Introduire plusieurs variables depuis un .csv