VMware PowerCLI ist ein Command-Line Interface Tool für die Steuerung und Automatisierung von VMware vSphere. Wie es der Name bereits vermuten lässt, werden PowerCLI Kommandos in der Windows PowerShell via PowerCLI cmdlets ausgeführt. Im heutigen Artikel möchte ich Ihnen die PowerCLI näher bringen und Ihnen erste Scripts an die Hand geben.
Installation
Die PowerCLI Installationsdatei kann unter https://my.vmware.com/web/vmware/details?downloadGroup=PCLI550R2&productId=353 heruntergeladen werden. Voraussetzung für die Installation ist eine funktionsfähige Windows PowerShell 2.0, sowie .NET Framework 3.5. Die Installation verläuft unspektakulär und benötigt keine zusätzlichen Eingaben.
Für das erfolgreiche Ausführen selbstgeschriebener PowerCLI Scripts ist es wichtig, die Execution Policy der Windows PowerShell anzupassen. Um dies durchzuführen, muss zuerst eine Windows PowerShell als Administrator ausgeführt werden. Mit dem Cmdlet Set-ExecutionPolicy können Sie bestimmen, welche Windows PowerShell-Skripts auf Ihrem Computer ausgeführt werden dürfen. Durch den Parameter Unrestricted gibt es keine Einschränkungen. Alle Windows PowerShell-Skripts können ausgeführt werden.
1 |
Set-ExecutionPolicy Unrestricted |
Nach dem Öffnen der vSphere PowerCLI verbindet man sich im ersten Schritt zum gewünschten vCenter. Dies geschieht via
1 |
Connect-VIserver [FQDN Ihres vCenters] |
Sollte der aktuell angemeldete Benutzer nicht über Zugriffsrechte im vCenter verfügen, werden Sie zusätzlich zu einer Authentifizierung aufgefordert.
Eine Sammlung der wichtigsten PowerShell Befehle kann in folgendem VMware Poster eingesehen werden:
Backup der ESXi Konfig
Seit der Möglichkeit den VMware ESXi’s auf einem USB Stick zu installieren, kommt immer häufiger die Frage nach einer Sicherung der Host-Konfiguration (Networking, Datastores, Advanced Settings etc.). Um die Konfiguration eines ESXi Hosts zu sichern, muss folgendes Kommando ausgeführt werden:
1 |
Get-VMHostFirmware -VMHost $host -BackupConfiguration -DestinationPath C:\HostBackup |
Sollte man ein automatisch periodisches Backup seiner ESXi Konfigurationen benötigen, kann dies via Windows Scheduled Task ausgeführt werden. Hierzu folgendes Skript als .ps1 Datei speichern:
1 2 3 4 |
add-pssnapin VMware.VimAutomation.Core Connect-VIServer [FQDN Ihres vCenters] -User[Ihr Benutzer] -Password [Ihr Kennwort] Get-VMHostFirmware -VMHost $host -BackupConfiguration -DestinationPath C:\HostBackup exit |
Anschließend muss im Windows Server (mit installierter PowerCLI) unter „Verwaltung“ ein „Scheduled Task“ erstellt werden. Neben den gewünschten Durchführungszeiten, muss das Skript mit Hilfe des folgenden Kommandos ausgeführt werden:
1 |
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe “& ‘C:\Scripts\MyScript.ps1′” |
Die Konfigurationen jedes ESXi Hosts werden als .tgz Datei im gewünschten Verzeichnis abgelegt. Sollte nun beispielsweise ein ESXi USB Stick „den Geist aufgeben“, kann nach der Standardinstallation und Vergabe der alten IP – Adresse, das Backup zurückgespielt werden:
1 |
Set-VMHostFirmware -VMHost $Host -Restore -SourcePath c:\Hostbackups\backupfile.tgz -HostUser root -HostPassword password |
Nach einem Neustart des Hosts sind alle, sich im Backup befindlichen, Einstellungen wieder vorhanden.
Anzeigen von Snapshots
Häufig kommt es vor, dass sich auf virtuellen Maschinen veraltete Snapshots befinden. Sich bei jeder VM durch den Snapshot Manager zu klicken ist deutlich mühsamer als das Anzeigen der Snapshots via PowerCLI:
1 |
get-vm | get-snapshot | format-list |
Anschließend können die Snapshots einer virtuellen Maschine auch gelöscht werden:
1 |
Get-Snapshot [VMname] | Remove-Snapshot -confirm:$false |
Anzeigen von Orphaned vmdk’s
Orphaned vmdk’s sind virtuelle Festplatten, die sich in keiner Beschreibungsdatei einer virtuellen Maschine (.vmx) wiederfinden lassen und somit auch keiner virtuellen Maschine zugeordnet sind. Sind diese virtuellen Festplatten nicht mehr notwendig, können diese gelöscht werden und somit Speicherplatz freigegeben werden. Das folgende Skript muss in einem Editor des Vertrauens kopiert und als .ps1 Datei gespeichert werden. Anschließend kann die Datei via Drag & Drop in das PowerCLI Fenster gezogen und mit Enter ausgeführt werden. Dieses Skript kann auch unter http://virtuallyjason.blogspot.de/ wiedergefunden 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 |
$report = @() $arrUsedDisks = Get-View -ViewType VirtualMachine | % {$_.Layout} | % {$_.Disk} | % {$_.DiskFile} $arrDS = Get-Datastore | Sort-Object -property Name foreach ($strDatastore in $arrDS) { Write-Output "$($strDatastore.Name) Orphaned Disks:" $ds = Get-Datastore -Name $strDatastore.Name | % {Get-View $_.Id} $fileQueryFlags = New-Object VMware.Vim.FileQueryFlags $fileQueryFlags.FileSize = $true $fileQueryFlags.FileType = $true $fileQueryFlags.Modification = $true $searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec $searchSpec.details = $fileQueryFlags $searchSpec.matchPattern = "*.vmdk" $searchSpec.sortFoldersFirst = $true $dsBrowser = Get-View $ds.browser $rootPath = "[" + $ds.Name + "]" $searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec) foreach ($folder in $searchResult) { foreach ($fileResult in $folder.File) { if ($fileResult.Path) { $pathAsString = out-string -InputObject $FileResult.Path if (-not ($arrUsedDisks -contains ($folder.FolderPath + $fileResult.Path))){ # Changed Black Tracking creates ctk.vmdk files that are not referenced in the VMX. This prevents them from showing as false positives. if (-not ($pathAsString.toLower().contains("-ctk.vmdk"))){ $row = "" | Select DS, Path, File, Size, ModDate $row.DS = $strDatastore.Name $row.Path = $folder.FolderPath $row.File = $fileResult.Path $row.Size = $fileResult.FileSize $row.ModDate = $fileResult.Modification $report += $row Write-Output "$($row.Path)$($row.File)" } } } } } } |
Anzeigen Thick Provisioned Disks
Mit Hilfe des folgenden Skripts können alle Thick Provisioned Disks angezeigt werden. Oftmals werden virtuelle Festplatten versehentlich als Thick Provisioned Disks angelegt und verbrauchen somit unnötig Speicherplatz auf dem Storage.
1 2 3 4 5 6 7 8 |
get-vm | get-view | %{ $name = $_.name $_.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualDisk"} | %{ if(!$_.Backing.ThinProvisioned){ "$name has a thick provisioned disk" } } } |
Anhand des folgenden Artikels kann dies auch im Nachhinein geändert werden: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2014832
Wie Sie sehen, können Sie mit Hilfe der PowerCLI viele Tasks schneller und effizienter ausführen oder gar automatisieren. Sollte ich Sie auf den Geschmack gebracht haben, besuchen Sie den Blog von Alan Reouf (http://www.virtu-al.net/). Hier finden Sie weitere Scripts für unterschiedliche Einsatz- und Anwendungszwecke.
Sollten Sie Hilfe für den Einstieg in die vSphere PowerCLI benötigen, freuen wir uns über Ihre Nachricht.