Zoek op trefwoord, naam of systeem:

Blog

  • 5
    april
    2017
    Technology Professional, Technology Professional

    PowerCLI

    Vorige week heeft Sander Martijn een artikel geschreven over het benaderen van de VMware API via scripting. In dit artikel ga ik in op PowerCLI, het benaderen van de VMware API met PowerShell.

    Wat is PowerShell?

    Wellicht is deze introductie overbodig, aangezien Microsoft de laatste jaren veel aandacht heeft gevestigd op PowerShell en wat hiermee mogelijk is. Toch wil ik hier nog even bij stilstaan.

    PowerShell is een automation platform en scriptingtaal voor Windows en Windows Servers. Met de juiste scripts en commando’s kun je hiermee het beheer van je omgeving vereenvoudigen en versimpelen.

    Ja, oké. Maar we hebben toch al een heleboel automation en scripting tools zoals VBScript, JavaScripts, batch/commands, etc.? Waarom hebben we dan toch PowerShell nodig?

    Die vraag is eenvoudig te beantwoorden. Omdat niet alleen Microsoft, maar ook andere partijen steeds meer Windows PowerShell commands, oftewel cmdlets, beschikbaar stellen. Ook het feit dat Microsoft steeds meer richting open source gaat en PowerShell beschikbaar gesteld heeft op Linux en macOS is een belangrijke motivatie om toch eens naar PowerShell te gaan kijken.

    PowerShell cmdlets stellen je in staat om computers in je IT infrastructuur vanaf de commandregel te beheren en aan te passen. Windows PowerShell providers bieden toegang tot schijven en directories, registry, certificaten en ga zo maar door. Steeds meer vendoren leveren ondersteuning voor PowerShell voor hun producten, zodat ook deze producten vanaf commandoregel zijn aan te sturen.

    PowerShell is vrij eenvoudig te doorgronden, maar dit moet niet verward worden met een gebrek aan kracht. Cmdlets en providers gebruiken een generiek syntax en naamconventie. Daarnaast is data eenvoudig te delen en de uitvoer van de ene cmdlet kan simpel gebruikt worden als de input van een andere cmdlet, zonder dat de output eerst aangepast hoeft te worden. Dit is een groot verschil met eerdere/andere scripttalen, waarbij tekst werd doorgegeven van het ene commando naar het andere commando.

    PowerShell gebruikt een “verb-noun” (werkwoord-zelfstandig naamwoord) systeem, waarbij iedere cmdlet bestaat uit een combinatie van die twee. Hierdoor zijn cmdlets redelijk eenvoudig te begrijpen.

    Een paar voorbeelden van werkwoorden die gebruikt worden: Get, Set, Stop, Start. De werkwoorden worden gecombineerd met een zelfstandig naamwoord door middel van een koppelstreepje. Om processen te manipuleren op een Windows computer kun je dan gebruik maken van Get-Process, Stop-Process, Start-Process. Kijk voor een volledige set toegestane werkwoorden hier.

    Hoe kan ik met PowerShell mijn VMware omgeving beheren?

    VMware stelt een set met cmdlets beschikbaar waarmee je VMware omgevingen kunt beheren, PowerCLI. Deze cmdlets zijn op dezelfde manier opgebouwd als de cmdlets die al aanwezig zijn in PowerShell en werken op dezelfde manier. Voorbeelden hiervan zijn Start-VM, Stop-VM, Get-VM, New-VM. Met een paar eenvoudige regels kun je zo al snel een grote set VMs aanmaken en starten.

    Wat betekent dit nu concreet?

    Eerst zullen we PowerCLI moeten installeren. Deze is te vinden op http://www.vmware.com/go/powercli. Nadat we deze geïnstalleerd hebben moeten we eerst verbinding maken met vCenter of ESXi host. Dit doen we met de cmdlet Connect-VIServer.

    Wanneer we geen parameters opgeven vraagt PowerCLI om server, gebruikersnaam en wachtwoord, maar we kunnen deze gegevens ook meegeven in de commandoregel.
    Connect-VIServer -Server vc01.domain.local -User administrator@vsphere.local -Password ThisIsNotSecure

    In bovenstaand voorbeeld lijken twee domeinnamen gebruikt te worden, maar dat is niet het geval. vc01.domain.local is de daadwerkelijke naam van de vCenter server in DNS. administrator@vsphere.local is het (standaard) beheerdersaccount in vCenter.

    Normaal gesproken gebruiken we het wachtwoord niet op de commandoregel in verband met security, logging, e.d. Hiervoor zijn andere oplossingen, maar dat gaat voor dit voorbeeld iets te ver.

    Daarna kunnen we een VM aanmaken met de naam testVM in resource pool ResourcePool:
    New-VM -Name testVM -ResourcePool ‘ResourcePool’

    Ook kunnen we andere parameters meegeven bij het aanmaken, zoals aantal vCPU’s, hoeveelheid geheugen, diskomvang en netwerknaam (portgroup).
    New-VM -Name testVM -ResourcePool ‘ResourcePool’ -NumCpu 4 -MemoryGB 2 -DiskMB 40960 -NetworkName ‘production network’

    Bovendien kunnen we acties uitvoeren op meer dan één virtuele machine. Hiervoor kun je gebruik maken van wildcards bij de cmdlets.

    Wildcard Omschrijving Voorbeeld Resultaat
    * Komt overeen met nul of meer tekens, beginnend op de positie van de wildcard VM* VMab, VM-123
    ? Komt overeen met ieder teken op de posititie VM-? VM-1, VM-a, VM-b
    [ ] Komt overeen met een reeks tekens VM-[1-3] VM-1, VM-2, VM-3
    [ ] Komt overeen met de gespecificeerde tekens VM-[abc] VM-a, VM-b, VM-c

    Wanneer je van alle VMs beginnend met ‘dt-‘ de hoeveelheid geheugen wilt aanpassen naar 2GB gebruik je de volgende regel:
    Get-VM dt-* | Set-VM –MemoryGB 2

    Het eerste deel van deze regel haalt alle VMs op beginnend met dt- met Get-VM. Vervolgens wordt deze selectie doorgegeven aan Set-VM.

    Deze actie gaat alleen goed wanneer de virtuele machines uit staan. Wanneer de machines aan staan, zul je ze eerst uit moeten zetten (tenzij je hot-add memory hebt aan staan in de configuratie van de virtuele machine).

    Als je ook de virtuele machines wilt uitzetten, krijg je de volgende regel:
    Get-VM -Name dt-* | Shutdown-VMGuest | Set-VM –MemoryGB

    Hierop voortbordurend kun je ook handige dingen doen, zoals een VM twee keer zoveel geheugen geven:
    Get-VM –name testVM | Set-VM  -MemoryGB ((Get-VM -Name MyVM).MemoryGB * 2)

    Of het geheugen van een VM gelijk maken aan dat van een andere VM.
    Set-VM -VM testVM1 -MemoryGB (Get-VM -Name testVM2).MemoryGB

    Zijn er nog meer VMware producten die via PowerShell/PowerCLI zijn te bedienen?

    Er zijn een groot aantal modules/snapins/plugins/hoejezeooknoemt beschikbaar voor PowerShell en PowerCLI. Een kleine opsomming:

    • Horizon View
    • vCloud Director
    • NSX (PowerNSX)
    • vRealize Automation (PowervRA)

    Afsluitend

    Zoals je kunt zien is er veel mogelijk met PowerCLI. Wat in de grafische interface veelvuldig klikken is, kan vaak in één regel vanuit PowerCLI worden uitgevoerd.
    Wil je meer weten over PowerShell of PowerCLI?  Neem dan contact met ons op.

    Dit artikel is eerder verschenen op VMGuru als onderdeel van een reeks artikelen.

Trefwoorden: PowerShellVMware

Email Technology Professional

Lees alle blogberichten van Technology Professional

Deel dit bericht

Geen reacties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *