De laatste dagen amuseer ik mezelf meer en meer met het creëren van Powershell scripts voor VMWare. Powershell op zich is al een erg interessante scripting taal die al zijn voorgangers op serieuze achterstand zet en naar mijn mening zeer toegankelijk is, ook voor niet-programmeurs zoals mezelf.
Om Powershell los te laten op VMWare omgevingen, heb je een extra tooltje van VMWare zelf nodig: vSphere PowerCLI (werkt perfect met VI3 hoor) dat te downloaden is op de VMWare website. Samen met de standaard Powershell installatie geeft die plugin je een waaier van opties die serieus de moeite zijn voor alle VMWare admins out there.
Persoonlijk heb ik een aparte virtuele machine in mijn omgeving waarop ik allerhande management / monitoring tools installeer voor de VMWare omgeving. Dit zorgt er niet alleen voor dat elke admin toegang heeft tot de logs en de mogelijkheden van de eerder genoemde tools, maar ook dat je computer niet moet blijven opstaan (lees: niet gereboot mag worden) omdat er één of ander script aan het lopen is.
Eenmaal alles deftig geïnstalleerd is, is the sky the limit. Virtuele machines aanmaken, deleten, starten, stoppen, snapshotten, herconfigureren, clonen, migreren,… you name it. Vaneigens mag je de scripts van “scratch” opbouwen, maar zelf vind ik het nogal dom om telkens opnieuw het warme water te gaan uitvinden, dus is Google mijn beste vriend ;-). Zoek met enkele keywords naar een goed basisscript en pas dit dan aan naar gelang wat je nodig hebt.
Does the trick over here! Mijn recentste “creatie” is een scriptje dat alle virtuele machines in de resource pool “Production” afloopt en alle snapshots verwijdert die ouder zijn dan 15 dagen. Aangezien ik voor backup redenen van de productie-VM’s wekelijks een snapshot maak, zorgt dit script ervoor dat de er nooit meer dan twee snapshots beschikbaar zijn. Dit houdt de machine snel en neemt de manuele arbeid om de snapshots te deleten uit de vergelijking. Plus je kan die scripts in een schedule draaien zodat die zaken gewoon ‘s nachts kunnen lopen.
De code:

$a = get-vm -Location Production;Get-Snapshot $a | Where { $_.Created -lt (Get-Date).AddDays(-15)} | remove-snapshot -Confirm:$false

Het script zoekt alle virtuele machines in de resource pool “Production” en plaats die lijst in de variabele “a”. Die informatie wordt “gepiped” naar het volgende commando waar de virtuele machines die in lijst “a” zitten gescand worden op snapshots die ouder zijn dan 15 dagen. Alle snapshots die ouder zijn dan de vooropgestelde periode worden verwijderd zonder dat er een confirmatie van de admin moet zijn.
That’s it.