PowerCLI erweitert die bekannte Windows-basierte PowerShell um Funktionen, mit denen es möglich ist, vSphere-, vCloud- und vRealize Operations Manager-Schnittstellen anzuzapfen und sich diese zunutze zu machen. Unter Zuhilfenahme dieser Technologien lassen sich einfache und häufig wiederkehrende Wartungsaufgaben – oder auch komplexere Prozesse – ausführen.
PowerCLI-Skript für die Überwachung von VMs
Im vorliegenden Fall ist es erforderlich, für einige VMs besonderes Augenmerk auf die Füllstände der Partitionen zu legen. Daher habe ich ein PowerCLI-Skript programmiert, mit dem bestimmte VMs überwacht werden können. Damit das Ergebnis auch greifbar ist, wird eine HTML-basierte E-Mail generiert und an eine vorgegebene Adresse (oder einen E-Mail-Verteiler) gesendet.
Screenshot: Output des Skripts in leserlicher HTML-Tabelle
Die Besonderheit dieses Skripts liegt darin, dass es einzelne Partitionen von VMs ausliest, wobei es nicht darauf ankommt, ob es sich um Windows- oder Linux-VMs handelt. Es ist einzig und allein wichtig, dass auf den VMs, die überwacht werden, VMware Tools installiert sind.
Zur Erläuterung:
Der nachfolgende Code enthält als Beispiel eine Abfrage aller VMs, die über den Web Client mit dem Tag „Produktiv“ versehen sind. Wenn man stattdessen alle VMs abfragen möchte oder aber andere VMs, muss der Tag geändert oder die gezielte Abfrage weggelassen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | <# .SYNOPSIS Speicherplatzreport Produktiv-VMs .DESCRIPTION Dieser Speicherplatzreport verschickt automatisch E-Mails zur Warnung, wenn Datentraegerbelastungsgrenzen erreicht oder ueberschritten werden. .NOTES Autor: Tobias Heyl <tobias.heyl@orbit.de> .LINK http://www.orbit.de/ #> # =============================================================== # Definition Variablen # # =============================================================== # vCenter Login # =============================================================== $vCenterServer = 'IP-Adresse oder Name des vCenter Servers eingeben' $vCenterUser = 'vCenter-Benutzer mit Zugriffsrechten eingeben' $vCenterPass = 'Passwort für diesen Benutzer eingeben' # Definition Warn- und Signalfarben # =============================================================== $FarbwertWarnung = "#FF8C00" #DarkOrange $FarbwertKritisch = "#FF4500" #OrangeRed # Definition Exportverzeichnis, wenn HTML-Datei generiert wird # =============================================================== $ExportPfad = "D:\Export\DiskSpaceReport.html" # Definition Schwellenwerte # =============================================================== $SchwellenwertWarnung = 25 $SchwellenwertKritisch = 15 # Definition Umgebung # =============================================================== $Tagtyp = "Produktiv" # Definition E-Mail-Variablen # =============================================================== $messageParameters = @{ From = "Von@dieser-Adresse.de" To = "An@diese-Adresse.de" Subject = "Speicherplatzreport aller Produktiv-VMs" Smtpserver = "smtp-server.domain.loc" Body = $Body } # Definition Datumsangabe # =============================================================== $Datumsangabe = [system.datetime]::Now #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# Clear-Host # Verbindung zum vCenter herstellen Connect-VIServer -Server $vCenterServer -User $vCenterUser -Password $vCenterPass -ErrorAction Continue # Variable mit HTML-Anteil ueber betroffene VMs $Output = @() # Durchlauf ueber alle VMs, die 1.) angeschaltet sind und 2.) mit dem Tag "Produktiv" versehen sind ForEach ($VM in Get-VM -Tag $Tagtyp | Where-Object {($_.powerstate -ne "PoweredOff")}){ ForEach ($Drive in $VM.Extensiondata.Guest.Disk) { $Path = $Drive.DiskPath # Kapazitaetsberechnungen # ====================================================================================================== # Angaben zur Berechnung: # - $Speichergesamt Gesamtspeicher # - $SpeicherFrei Freier Speicher # - $Speicherbelegt Gesamtspeicher - Freier Speicher # - $SpeicherFreiProz Freier Speicher / Gesamtspeicher * 100 $Speichergesamt = [math]::Round(($Drive.Capacity / 1GB),2) $SpeicherFrei = [math]::Round(($Drive.FreeSpace / 1GB),2) $Speicherbelegt = [math]::Round((($Drive.Capacity / 1GB) - ($Drive.FreeSpace)),2) $SpeicherFreiProz = [math]::Round(($SpeicherFrei)/ ($Speichergesamt) * 100) if ($SpeicherFreiProz -lt $SchwellenwertKritisch) { # Ausgaben # VM, Disk, Gesamtgroesse, Belegt, Belegt % $ReportVMName = "<tr><td>{0}</td>" -f $vm.name $ReportVMDisk = "<td>{0}</td>" -f $Path $ReportVMKapazitaet = "<td class='right'>{0}</td>" -f $Speichergesamt $ReportVMBelegt = "<td class='right'>{0}</td>" -f $SpeicherFrei $ReportVMBelegtProz = "<td class='right' bgcolor='$FarbwertKritisch'>{0}</td></td>" -f $SpeicherFreiProz $Output += $ReportVMName $Output += $ReportVMDisk $Output += $ReportVMKapazitaet $Output += $ReportVMBelegt $Output += $ReportVMBelegtProz } elseif ($SpeicherFreiProz -lt $SchwellenwertWarnung) { $ReportVMName = "<tr><td>{0}</td>" -f $vm.name $ReportVMDisk = "<td>{0}</td>" -f $Path $ReportVMKapazitaet = "<td class='right'>{0}</td>" -f $Speichergesamt $ReportVMBelegt = "<td class='right'>{0}</td>" -f $SpeicherFrei $ReportVMBelegtProz = "<td class='right' bgcolor='$FarbwertWarnung'>{0}</td></td>" -f $SpeicherFreiProz $Output += $ReportVMName $Output += $ReportVMDisk $Output += $ReportVMKapazitaet $Output += $ReportVMBelegt $Output += $ReportVMBelegtProz } } # End ForEach ($Drive in in $VM.Extensiondata.Guest.Disk) } # End ForEach ($VM in Get-VM) #$Output # Definition E-Mail-Body # =============================================================== #region E-Mail-Body $Body = @" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Speicherplatzreport</title> <style> html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5} table,th,td{border:2px solid #ccc; padding: 2px;} .right {text-align: right;} .small {font-size:10px;color: #708090;} .FarbwertWarnung {background-color: $FarbwertWarnung} .FarbwertKritisch {background-color: $FarbwertKritisch} </style> </head> <body> <H2>Speicherplatzreport | Umgebung/VMs: $Tagtyp</H2> <p>Übersicht über VMs, deren Speicherplatz weniger als $SchwellenwertWarnung% beträgt.</p> <p><u><strong>Farblegende</strong></u>:<br /> <span class="FarbwertWarnung">Warnung</span>: Wenn Speicherplatz <= $SchwellenwertWarnung %<br /> <span class="FarbwertKritisch">Kritisch</span>: Wenn Speicherplatz <= $SchwellenwertKritisch % </p> <table> <tr> <th>VM</th> <th>Disk</th> <th>Total (GB)</th> <th>Frei (GB)</th> <th>Frei (%)</th> </tr> $Output </table> <p>Report erstellt am: $Datumsangabe</p> <p class="small">ORBIT IT-Solutions; Tobias Heyl <a href="mailto:tobias.heyl@orbit.de" title="E-Mail an Tobias Heyl senden">tobias.heyl@orbit.de</a></p> </body> </html> "@ #endregion E-Mail-Body # Exportieren der generierten HTML-Datei # Einkommentieren, wenn die HTML-Datei im Exportverzeichnis gespeichert werden soll #$Body > $ExportPfad # Senden der E-Mail Send-MailMessage @MessageParameters -BodyAsHtml # Verbindung zum vCenter trennen Disconnect-VIServer $vCenterServer -confirm:$false |
Ich habe das Skript so gut wie möglich und auf Deutsch kommentiert und hoffe, dass Sie als Leser damit weiterkommen. Wenn es irgendwo hakt, hinterlassen Sie gerne einen Kommentar.
Getestet ist das Ganze mit vCenter 5.5U3 auf der VCSA und unter Windows Server 2012R2, PowerCLI 6.