#--------------------------------------------------------------------------- # #- Tableau de bord cpu Infra VMWARE # # # out-voice peut etre telechargé sur http:\\powershell-scripting.com # le script est basé sur un hardware pour les ESX de 8 cpu # Touche Q pour arreter la boucle # Touche M pour activer ou deactiver le son #---------------------------------------------------------------------------- $tableau ="p:\fiche_change\tableau_de_bord.txt" #basé sur des ESX avec 8 cpu "esx,cpu0,cpu1,cpu2,cpu3,cpu4,cpu5,cpu6,cpu7,cpumoy,mem_used,balloon" | Out-File $tableau -Encoding oem -Force $infra1 = connect-viserver VcServeur1 $infra2 = connect-viserver VcServeur2 $ESCkey = 27 # touche esc pour fin de programme $Qkey = 81 # touche Q pour fin de programme $Mkey = 77 # touche M pour Mute $Stop=$false $mute = $false $echantillon = -5 cls #--------------------------------------------------------------------------------- # Recuperation des valeurs de performance $interrogation_host = { $cpu = get-stat -entity $esx -realtime -stat cpu.usage.average -start (get-date).addminutes($echantillon) [array]$cpus += $cpu |group-object instance |foreach{($_.group|measure-object -property value -average).average} $memaverage = get-stat -entity $esx -realtime -stat mem.usage.average -start (get-date).addminutes($echantillon) | measure-object -property value -average $balloonaverage = get-stat -entity $esx -realtime -stat mem.vmmemctl.average -start (get-date).addminutes($echantillon) | measure-object -property value -average $script:cpuranges = $null $cpus |foreach { [array]$script:cpuranges += [math]::truncate([math]::truncate($_)/10)+1 if ([math]::truncate([math]::truncate($_)/10)+1 -eq 10) {if ($mute -eq $false){ $esxcourt.ToCharArray()|foreach {$voix+="$_ "} "$voix is cpu overloaded" | out-voice $voix = $null} $script:cpualarme = $esxcourt} } $script:memrange = [math]::truncate([math]::truncate($memaverage.average)/10)+1 if ($memrange -eq 10) {if ($mute -eq $false){ $esxcourt.ToCharArray()|foreach {$voix+="$_ "} "$voix is cpu overloaded" | out-voice $voix = $null} $script:memalarme = $esxcourt} if ($balloonaverage.average -eq 0){$script:balloonrange =0} else{$script:balloonrange =10 if ($mute -eq $false){ $esxcourt.ToCharArray()|foreach {$voix+="$_ "} "$voix is cpu overloaded" | out-voice $voix = $null} $script:balloonalarme = $esxcourt} #--------------------------------------------------------------------------------- # modification du fichier, remplacement des infos de perf par ESX en temps reel $modif_tableau = { $locesx =(select-string "$esxcourt" $tableau).LineNumber if ($locesx-eq $null){ "$esxcourt,$($cpuranges[0]),$($cpuranges[1]),$($cpuranges[2]),$($cpuranges[3]),$($cpuranges[4]),$($cpuranges[5]),$($cpuranges[6]),$($cpuranges[7]),$($cpuranges[8]),$($memrange),$($balloonrange)" | Out-File $tableau -Encoding oem -Append -Force }# if locesx else { $temptableau = get-content $tableau $temptableau[$locesx-1] = "$esxcourt,$($cpuranges[0]),$($cpuranges[1]),$($cpuranges[2]),$($cpuranges[3]),$($cpuranges[4]),$($cpuranges[5]),$($cpuranges[6]),$($cpuranges[7]),$($cpuranges[8]),$($memrange),$($balloonrange)" $temptableau | Set-Content $tableau }#else locesx }# modif tableau #--------------------------------------------------------------------------------- # Affichage du tableau de bord a l'ecran $affichage = { $ligne1 ="range %`tAvgCPU`tCPU0`tCPU1`tCPU2`tCPU3`tCPU4`tCPU5`tCPU6`tCPU7`t||`tMemUsed`tBalloon" $var = Import-Csv $tableau # Affiche les valeurs du fichier for ($index=1;$index -le 10;$index++){ $a = "$($index-1)0-$($index)0" # place les ESX dans leur range de consomation (increment 10%)pour chaque range compte le nombre d'ESX $checkcpu0 =$var|where{$_.cpu0 -eq $index} $checkcpu1 =$var|where{$_.cpu1 -eq $index} $checkcpu2 =$var|where{$_.cpu2 -eq $index} $checkcpu3 =$var|where{$_.cpu3 -eq $index} $checkcpu4 =$var|where{$_.cpu4 -eq $index} $checkcpu5 =$var|where{$_.cpu5 -eq $index} $checkcpu6 =$var|where{$_.cpu6 -eq $index} $checkcpu7 =$var|where{$_.cpu7 -eq $index} $checkcpu8 =$var|where{$_.cpumoy -eq $index} $checkmem =$var|where{$_.mem_used -eq $index} $checkballoon =$var|where{$_.balloon -eq $index} if($checkcpu0.count -ne $null){$b=$checkcpu0.count} elseif($checkcpu0.esx -eq $null ){$b=0} else{$b=1} if($checkcpu1.count -ne $null){$c=$checkcpu1.count} elseif($checkcpu1.esx -eq $null ){$c=0} else{$c=1} if($checkcpu2.count -ne $null){$d=$checkcpu2.count} elseif($checkcpu2.esx -eq $null ){$d=0} else{$d=1} if($checkcpu3.count -ne $null){$e=$checkcpu3.count} elseif($checkcpu3.esx -eq $null ){$e=0} else{$e=1} if($checkcpu4.count -ne $null){$f=$checkcpu4.count} elseif($checkcpu4.esx -eq $null ){$f=0} else{$f=1} if($checkcpu5.count -ne $null){$g=$checkcpu5.count} elseif($checkcpu5.esx -eq $null ){$g=0} else{$g=1} if($checkcpu6.count -ne $null){$h=$checkcpu6.count} elseif($checkcpu6.esx -eq $null ){$h=0} else{$h=1} if($checkcpu7.count -ne $null){$i=$checkcpu7.count} elseif($checkcpu7.esx -eq $null ){$i=0} else{$i=1} if($checkcpu8.count -ne $null){$j=$checkcpu8.count} elseif($checkcpu8.esx -eq $null ){$j=0} else{$j=1} if($checkmem.count -ne $null){$k=$checkmem.count} elseif($checkmem.esx -eq $null ){$k=0} else{$k=1} if($checkballoon.count -ne $null){$l=$checkballoon.count} elseif($checkballoon.esx -eq $null ){$l=0} else{$l=1} [array]$result+="$a`t$j`t$b`t$c`t$d`t$e`t$f`t$g`t$h`t$i`t||`t$k`t$l" }# boucle for # Affichage du tableau cls $ligne1 $result[0] $result[1] $result[2] $result[3] $result[4] $result[5] $result[6] $result[7] $result[8] $result[9].split("`t") |foreach{ if ($_ -ge 1 -and $_ -notmatch "90") {write-host "$_`t" -nonewline -foregroundcolor red} else {write-host "$_`t" -nonewline} } write-host write-host write-host "last Cpu Alarm : $cpualarme" -ForegroundColor Black write-host "last Memory Alarm : $memalarme" -ForegroundColor Black write-host "last Ballooning Alarm : $balloonalarme" -ForegroundColor Black if ($mute){"Mute Mode"} else {""} }#affichage #--------------------------------------------------------------------------------- # appel des sous routines $esxs = get-vmhost -Server $infra1 ,$infra2 while (!$Stop) { $esxs |foreach{ $esx = $_ $esxcourt = $_.name.substring(0,8) &$interrogation_host &$modif_tableau &$affichage if ($host.UI.RawUI.KeyAvailable) { $key = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyUp") if (($key.VirtualKeyCode -eq $ESCkey) -OR ($key.VirtualKeyCode -eq $Qkey)) {$Stop=$True break } if ($key.VirtualKeyCode -eq $Mkey){$mute =!$mute} }# if key available }#boucle ESX }#while disconnect-viserver -server $infra1,$infra2 -confirm:$false Write-Host "fin"