Automatisieren und Verwalten von VMware vSphere mit PowerShell

Inhaltsverzeichnis

 

 

Post Featured Image

Es liegt wahrscheinlich daran, dass ich meine berufliche Laufbahn als Programmierer mit dem Schreiben von Gerätetreibern für Unix-Systeme in C begann, damals in den 1980er Jahren auf zeichenbasierten Green Screens (80 Spalten x 24 Zeilen!), weshalb ich die Verwaltung von IT-Systemen über eine Kommandozeile einer grafischen Benutzeroberfläche vorziehe. Ich bin kein Masochist, ich finde viele Vorgänge über eine PowerShell-Konsole wirklich einfacher und schneller als über eine (proprietäre) Benutzeroberfläche, selbst wenn diese in einem Webbrowser ausgeführt wird.

PowerShell bietet einige zusätzliche, allgemeine Vorteile gegenüber einer weniger modernen Konsole (cmd). Beachten Sie, dass letztere keine "DOS"-Konsole ist – auch, wenn sie auf den ersten Blick danach aussieht.

Das kann eine PowerShell-Konsole auch. Und sind wir mal ehrlich: die Tage von DOS sind längst vorbei, selbst wenn man DOS immer noch über Microsoft Visual Studio Subscriber (früher MSDN) Downloads beziehen kann, und vor kurzem sogar eine neue Version von FreeDOS bereitgestellt wurde.

Zu den Vorteilen von PowerShell gehören:

  • Durchsuchbarer Befehlsverlauf über Strg+R, der über mehrere Sitzungen und Neustarts bestehen bleibt, wenn Sie ein dauerhaftes Windows-Benutzerprofil haben. Wenn Sie ein Kommando schon einmal verwendet haben, sollten Sie es in der Historie finden und gegebenenfalls mit veränderten Parametern wiederverwenden können.
  • Die Tab-Vervollständigung von Cmdlets (PowerShell-Befehle und -Funktionen), sowohl von Cmdlet- als auch Parameternamen, in Verbindung mit bewährten Verben wie Get und Set bedeutet, dass Sie nur grob wissen müssen, wie der Befehl heißt. Ansonsten können Sie auch einfach den Befehl Get-Command mit Platzhaltern (Wildcards) verwenden.
  • Strg+Leertaste – das ist der Turbo für Ihre Tab-Vervollständigung! 
  • Arbeitserleichterung durch integrierte Hilfe für Cmdlets – und mit dem Befehl Get-Help -Online kann man sogar die zugehörige Hilfe-Website im Browser öffnen. Wenn Sie "Help" eingeben, sucht PowerShell nach einem Cmdlet mit dem Verb "Get", wenn das von Ihnen angegebene Cmdlet kein eigenständiges Cmdlet, keine Funktion oder kein Alias ist.

PowerCLI ist der Name, den VMware seinen PowerShell-Modulen gegeben hat – wovon es sage und schreibe über 70 verschiedene Module gibt. Daher der Tipp, nur die benötigten Module zu importieren, da das sonst sehr zeitaufwändig sein kann. PowerCLI umfasst alle Produkte von VMware. In diesem Artikel werde ich nur vSphere behandeln, obwohl vieles von dem, was hier steht, auch für ESXi ohne vCenter gilt.

Wenn Sie wissen, wie Sie VMware vSphere über PowerShell steuern, können Sie als Administrator noch effizienter arbeiten. Sie erreichen einen höheren Automatisierungsgrad und können Aufgaben so konfigurieren, dass diese bei Bedarf automatisch, ohne manuelles Eingreifen ausgeführt werden – ideal, wenn Ihr Wartungsfenster mitten in der Nacht liegt.

In diesem ersten Blog-Beitrag über VMware wollen wir uns mit der Installation und Einrichtung befassen, da hier womöglich einige Probleme auftreten könnten, die Sie überraschen. Ich hoffe, Ihnen den Einstieg in das Automatisieren und Verwalten von VMware vSphere mit PowerShell so verständlich und unkompliziert wie möglich zu machen.

 

Installation & Aktualisierung von PowerCLI

Man könnte annehmen, der Befehl Install-Module mit entsprechendem Scope-Parameter sollte ausreichen, um PowerCLI für alle Benutzer zu installieren. Leider muss ich Sie enttäuschen. Es gibt doch einige Hürden, die in Verbindung mit der Installation auftreten können. Um Zeitverschwendung und Frustration zu vermeiden, möchte ich im Folgenden näher darauf eingehen.

Bei Updates auf neuere Versionen könnte Ihnen diese Fehlermeldung begegnen:

01_recent versions of PowerCLI have caused this error

Das liegt daran, dass sich der Zertifikatsanbieter, den VMware zum Signieren der Module verwendet, geändert hat und PowerShell dies nicht zu berücksichtigen scheint. Dies kann durch die Verwendung des Cmdlets Uninstall-Module oder durch das Löschen der Ordner für die entsprechenden VMware-Module (in "$env:ProgramFiles\WindowsPowerShell\Modules") behoben werden.

Wenn Sie das Microsoft Hyper-V PowerShell-Modul bereits installiert haben, wird dieser Fehler angezeigt:

02_error with Microsoft Hyper-V PowerShell module installed

Durch die Verwendung des Parameters -AllowClobber wird Hyper-V nicht überschrieben, sodass es weiterhin verwendet werden kann. Sie sollten allerdings darauf achten, die richtigen Cmdlets auszuführen. Dies kann auf mehrere Arten geschehen:

  • Remove-Module -Name Hyper-V -ErrorAction SilentlyContinue
  • VMware.VimAutomation.Core\Get-VM (module qualification)
  • "Import-Module -Prefix vmware_" mit Ausführung von Connect-VMware_viserver, Get-VMware_vm etc.

Um die Module auf einen Rechner zu kopieren, der nicht mit dem Internet verbundenen ist, nutzen Sie einfach die entsprechenden Modulordner eines anderen Rechners, auf dem diese bereits installiert sind.

 

Eine Verbindung herstellen 

Mit dem Cmdlet Connect-VIserver wird eine Verbindung zu einem oder mehreren vCenter- oder ESXi-Servern hergestellt. Wenn keine Anmeldeinformationen explizit als Parameter übergeben werden, wird eine Pass-Through-Authentifizierung als der Benutzer, der das Cmdlet ausführt, versucht. Wenn dies nicht möglich ist, wird empfohlen, den Parameter -Credential zu verwenden, anstatt die Anmeldeinformationen im Klartext zu übergeben, da diese unverschlüsselt im PowerShell-Verlauf gespeichert werden.

Möglicherweise wird eine Reihe von Warnungen angezeigt, die Sie im Voraus aber einzeln über das Cmdlet Set-PowerCLIConfiguration deaktivieren können. Außerdem können Sie dem Befehl Connect-VIServer den Parameter -Force mitgeben, der alle Benutzereingabeaufforderungen in der Benutzeroberfläche unterdrückt.

Berechtigungsnachweise (Credentials) können mit dem Cmdlet New-VICredentialStoreItem gespeichert werden. Sie werden automatisch an das Cmdlet Connect-VIserver übergeben, wenn es einen gespeicherten Berechtigungsnachweis für diesen Server gibt. Beachten Sie, dass Passwörter aus diesen gespeicherten Anmeldeinformationen ausgelesen werden können, allerdings nur durch den Nutzer, der sie ursprünglich erstellt hat und nur auf dem Rechner, auf dem sie initial erstellt wurden.

Das Cmdlet Connect-VIserver gibt ein Verbindungsobjekt zurück. Prüfen Sie, ob dieses einen anderen Wert als $null hat, bevor Sie fortfahren.

03_CpmmectVIserver returns a connection object

Denken Sie daran, nach Beendigung des Vorgangs das Cmdlet Disconnect-VIserver auszuführen, und zwar mit demselben Servermit demselben Serverparameter und der gleichen Befehlspipeline in dem vom Cmdlet Connect-VIserver zurückgegebenen Verbindungsobjekt. Geben Sie den Parameter -Confirm:$false an, wenn Sie Benutzereingabeaufforderungen automatisch bestätigen möchten.

Wenn Sie mehrere vCenter-Server im Einsatz haben, können Sie den Parameter -AllLinked angeben, um eine Verbindung zu allen Servern (gleichzeitig) herzustellen, sodass alle weiteren Befehle standardmäßig gegen alle ausgeführt werden. Wenn die Server nicht verknüpft sind, können Sie trotzdem eine Verbindung zu allen Servern herstellen, indem Sie das Cmdlet Connect-VIServer ausführen und dessen Parameter -Server eine kommaseparierte Liste der Server mitgeben. Die Liste wird dem Cmdlet als Array übergeben. Den Typ eines bestimmten Parameters können Sie leicht herausfinden, ohne auf RTFM zurückgreifen zu müssen, indem Sie sich eine Liste aller Parameter anzeigen lassen. Dafür geben Sie den Cmdlet-Namen gefolgt vom Minuszeichen ein und drücken Strg+Leertaste. Mit den Pfeiltasten können Sie dann den gewünschten Parameter ansteuern und der Typ wird unten links angezeigt, etwa so:

04_parameter and type

Seien Sie vorsichtig, wenn Sie sich direkt mit einem vCenter und einem ESXi-Server verbinden, da Sie möglicherweise doppelte Objekte zurückerhalten.

 

Fazit

In diesem Beitrag haben Sie gesehen, wie Sie die VMware PowerCLI verwenden um sich damit zu einem VMware vCenter oder ESXi zu verbinden und auf welche Probleme Sie dabei stoßen können. In der nächsten, spannenden Folge werde ich Ihnen die vielen Arten von Operationen zeigen, die nach der Verbindung durchgeführt werden können.

 

Good2know

Webinar: Vereinfachen Sie Ihr VMware Management mit PowerShell

Viele VMware-Management-Tasks können mit PowerShell und dem PowerCLI-Modul automatisiert werden. Neue VMs erstellen, Snapshots managen und VM-Konfigurationen ändern sind nur ein paar der wiederkehrenden To-Dos, bei denen PowerShell die VMware-Administration erleichtert.

In diesem Webinar zeigen wir Ihnen, wie Sie diese Aufgaben an Helpdesk-Teams und sogar an End-User delegieren können. Dieses Webinar richtet sich an Administratoren, IT und DevOps Professionals, PowerShell Entwickler und IT Leiter.

vmware-webinar

 

Das zeigen wir Ihnen im Webinar:


  • Aufgaben mit PowerCLI automatisieren
  • Die Anwendung des ScriptRunner ActionPacks für VMware
  • Typische Administratoren-Aufgaben mit PowerShell und ScriptRunner umsetzen
  • VMware Management-Aufgaben sicher und einfach umsetzen

Klicken Sie hier, um die Aufzeichnung zu erhalten:

 

Hier entlang zum Webinar!

 

Good2Know - Wissenswertes für ScriptRunner Nutzer

In unseren ActionPacks befinden sich im VMware Bereich neben den Skriptvorlagen auch zusätzlich Queries für die Nutzung in VMware.
Diese befinden Sich unter: ActionPacks / VMware / _QUERY_/

Good2Know_1

Die wichtigsten Queries sind z.B:

  • QUY_Get-VMHVDatastores.ps1 - Abfrage aller VMware Datastores
  • QUY_Get-VMHVHostNames.ps1 - Abfrage aller VMware ESXI Hostnamen
  • QUY_Get-VMHVHostNames.ps1 - Abfrage aller VMs
  • QUY_Get-VMHVSnapShots.ps1 - Abfragen aller Snapshots

Diese Queries sind zum Download frei verfügbar und können direkt über die ScriptRunner-Portalanwendung heruntergeladen und eingebunden werden.

Good2Know_2

Nach dem Import kann diese als „Scripted Query“ hinzugefügt werden.

Good2Know_3

Für die Ausführung sind die VMware Anmeldedaten zu hinterlegen.

Good2Know_4

Anschließend kann die Query ausgeführt und getestet werden.

Pro-Tipp:

Je nach Umfang der Query kann es 30 Sekunden bis eine Minute dauern, bis diese erfolgreich abgeschlossen ist. Hier kann es ratsam sein, diese Query zeitlich zu schedulen, die Query also z.B. alle zehn Minuten automatisiert durchläuft. In vielen Fällen ist es gar nicht notwendig, Echtzeitdaten zu verarbeiten.

Good2Know_5

 

 

 

Weiterführende Links

Zusammenhängende Posts

Über den Autor: