Voorheen hebben we gekeken naar PowerCLI – wat het is, hoe het te installeren, en integratie in Windows Powershell ISE. Laten we nu eens kijken naar basis scripting, inclusief verbinden, PowerCLI-commando’s, evenals loopstructuren.
Basis PowerCLI scripting
Laten we eens kijken naar een paar basis PowerCLI-commando’s om te zien hoe eenvoudig het is om informatie uit onze vSphere-omgeving te halen met PowerCLI. Houd in gedachten dat het onderstaande op geen enkele manier bedoeld is als een allesomvattende tutorial, maar eerder als een kennismaking met PowerCLI en hoe je kunt beginnen met het uitvoeren van commando’s en leren automatiseren van je omgeving.
Het eerste commando dat we moeten uitvoeren, is het commando om daadwerkelijk verbinding te maken met onze vSphere-omgeving. U kunt rechtstreeks verbinding maken met een ESXi-host of met vCenter Server.
Om verbinding te maken, voert u het volgende commando uit in een PowerCLI-ingeschakelde PowerShell-sessie:
connect-viserver -server 〈uwserver〉
Wanneer u het commando uitvoert, wordt u gevraagd om uw aanmeldingsgegevens. Typ uw gebruikersnaam en wachtwoord in voor uw ESXi-server of vCenter Server.
Een van de meest basale commando’s die we kunnen uitvoeren wanneer we verbinding maken met ESXi of vCenter, is het zien van alle VM’s in de omgeving. We gebruiken het commando get-vm om informatie over de gast-VM’s te tonen.
Get-VM - Het get-vm commando lijst VM's die draaien op de verbonden host
Om meer uitgebreide informatie te krijgen van het get-vm
commando, kunnen we de volledige informatie tonen met het commando:
Get-VM | fl
– Geeft meer gedetailleerde informatie weer, zoals het gastbesturingssysteem, resourcepools, VM hardwareversieniveau, de map waarin het zich bevindt, en vele andere details.
Nu, laten we specifieke nuttige informatie teruggeven van de Get-VM opdracht. Laten we de VM’s vinden die zich in de PoweredOff-status bevinden. We kunnen informatie verkrijgen van de Get-VM
opdracht en deze vervolgens doorsturen naar where-object
om de specifieke informatie te selecteren die we willen opvragen – in dit geval PowerState
. Zoals je kunt zien, zijn er talloze mogelijkheden om verschillende VM-informatie te verkrijgen en deze informatie door te sturen naar een andere PowerShell-opdracht.
Get-VM | where-object {$_.PowerState -eq "PoweredOff"}
Zoals je kunt zien, worden alleen de VM’s weergegeven die zich in de “PoweredOff” PowerState bevinden. Dit kan uiterst nuttig zijn. We kunnen zelfs het resultaat van de bovenstaande opdracht doorsturen naar de Start-VM opdracht. Dus in feite kunnen we alle uitgeschakelde VM’s krijgen en vervolgens die VM’s inschakelen.
Get-VM | where-object {$_.PowerState -eq "PoweredOff"} | Start-VM
Wat dacht je van het uitschakelen van specifieke VM’s? Dat kunnen we ook doen. We kunnen de VM bij naam noemen en vervolgens de Stop-VMGuest opdracht gebruiken die een shutdown van het gastbesturingssysteem initieert.
Get-VM
| Stop-VMguest
Als je de bevestiging van de actie niet wilt ontvangen, kunnen we de -confirm:false parameter toevoegen:
Laten we zeggen dat we willen zien hoeveel virtuele machines we hebben die meer dan 1 CPU hebben toegewezen. Opnieuw kunnen we de where-object commandlet gebruiken om het NumCpu object te selecteren.
Get-VM | where-object {$_.NumCpu –gt 1 }
PowerCLI-lussen
Lussen stellen u in staat om dezelfde bewerking meerdere keren uit te voeren tegen geselecteerde objecten of een aantal keren doorlopen. Met een foreach-lus kunnen we bijvoorbeeld een bepaalde actie meerdere keren herhalen. Het is opgezet zoals de pseudo-code hieronder:
foreach ($var in $vars){
Doe iets...
}
Als we specifiek willen zijn over welke objecten we de actie willen uitvoeren, kunnen we bijvoorbeeld door een specifieke lijst van VM’s uit een tekstbestand lopen. Om het tekstbestand te vullen, kunnen we onze Get-VM commandlet uitvoeren en de gewenste eigenschappen selecteren, en vervolgens die naar een tekstbestand leiden. We kunnen vervolgens PowerShell gebruiken om het tekstbestand te lezen en de VM’s in een array te plaatsen waarop we kunnen doorlopen en een actie kunnen uitvoeren. Hieronder voegen we een nieuwe netwerkadapter toe aan VM’s in de lijst.
Get-vm | where-object {$_.MemoryGB –eq 4 } | select -ExpandProperty Name | out-file c:\VMs.txt
$vms = get-content c:\VMs.txt
Foreach-object ($vm in $vms) {
new-networkadapter -vm $vms -NetworkName "〈Poortgroepnaam〉" -Type "VMXNET3" –startconnected
}
Resources
Er zijn veel geweldige bronnen te vinden op het web, waaronder persoonlijke blog sites, officiële documentatie, codevoorbeelden, enzovoort. Wat ik heb gemerkt is dat als je iets bedenkt dat je wilt doen, de kans groot is dat iemand al een regel PowerCLI-code heeft geschreven die doet wat je wilt. Het goede nieuws is ook dat je meestal iets kunt vinden dat erg dicht in de buurt komt van wat je wilt doen, en met zeer weinig aanpassingen na het leren van de basis, kun je het aanpassen aan jouw behoeften. Door dit ook te doen, leer je PowerCLI en hoe het werkt, evenals hoe je de code kunt aanpassen om de taak uit te voeren die je moet volbrengen.
A great place to start with documentation and other resources is the official VMware PowerCLI release and documentation site. Here, you can download the binaries as well as the official User’s Guide.
Er zijn ook tal van boeken met scripts en voorbeeldscripts die kunnen worden ontleed en aangepast. Houd ook rekening met de community van VMware-beheerders daarbuiten die, voor het grootste deel, graag de kennis delen die ze hebben opgedaan van iemand anders op weg naar het bekwaam worden met PowerCLI. Neem contact op met degenen in jouw gemeenschap voor hulp bij specifieke zaken of gewoon algemene principes.
Gedachten
PowerCLI is zeer krachtig, om het zachtjes uit te drukken. We hebben alleen maar het topje van de ijsberg laten zien in de bovenstaande voorbeelden. Elke taak die je herhaaldelijk uitvoert, of die lastig is om in de webclient te doen, zijn geweldige kandidaten voor scripting met PowerCLI. In feite is dat meestal hoe de meeste mensen kennismaken met PowerCLI – ze hebben een taak die ze automatisch moeten uitvoeren of een actie die gebaseerd is op andere acties in vSphere, of opnieuw repetitieve acties die goed geschikt zijn voor scripting.
De beste manier om PowerCLI te leren, is door het te downloaden, te installeren en het te gebruiken in een labomgeving zoals een thuislab. De echte kracht van een VMware vSphere-omgeving wordt pas echt zichtbaar wanneer u het potentieel van automatisering ziet om de controle over vSphere over te nemen. Dus begin met het schrijven van scripts met PowerCLI en u zult er nooit meer op terugkijken!
Source:
https://www.nakivo.com/blog/basic-powercli-scripting-vmware-vsphere/