PowerCLI offline Installation

In vielen Firmenumgebungen sind strikte Sicherheitsrichtlinien in Kraft. Damit ist es nur eingeschränkt, oder überhaupt nicht möglich auf Internet Resourcen zurückzugreifen. Das bemerkt man beispielsweise, wenn man versucht PowerCLI auf einem Management System zu installieren. Zwar bietet die Verfügbarkeit der PowerCLI Module in der Powershell Gallery eine einfache Methode der Installation, oder des Updates, jedoch nur wenn der Zugriff zu dieser externen Ressource von Powershell erlaubt ist. Die Verwendung der Powershell Gallery erfordert den NuGet Packet Management Provider. Auch dieser muss online bezogen werden.

 Install-Module -Name VMware.PowerCLI -Scope CurrentUser 

Ist die Internetverbindung eingeschränkt, oder blockiert, so scheitert obiger Befehl. Doch man kann die Module auch offline übertragen. Dazu benötigt man einen PC mit freiem Internetzugang. Hier verwendet man nun einen anderen Befehl, der die Module nicht installiert, sondern nur in einen definierten Pfad herunter lädt.

 Save-Module -Name VMware.PowerCLI -Path C:\temp\PSModules

Den gesamten Inhalt des Ordners PSModules kopiert man auf ein Speichermedium der Wahl (z.B. USB Flashmedium) und überträgt die Dateien zum gewünschten Offlinesystem, auf dem PowerCLI benötigt wird.

Wenn man auf dem Zielsystem über Adminrechte verfügt, können die Module in folgenden Pfad kopiert werden.

 C:\Program Files\WindowsPowerShell\Modules 

Jetzt sind die PowerCLI Module auch auf dem Offlinesystem verfügbar. Für ein Versionsupdate muss die Prozedur wiederholt werden. Es ist ratsam, die VMware Module zuvor zu entfernen, bevor man die aktuellen überträgt.

Get-Module VMware.* -ListAvailable | Uninstall-Module -Force

Weitere Anpassungen

Customer Experience Improvement Program (CEIP)

Das VMware Customer Experience Improvement Program sammelt Daten über die Verwendung von VMware Produkten. Dem kann man entweder zustimmen (true), oder es ablehnen (false). Für Offlinesysteme ist nur die Ablehnung (false) sinnvoll. Der unten dargestellte Befehl unterdrückt zukünftige Nachfragen innerhalb der PowerCLI.

Set-PowerCLIConfiguration -Scope AllUsers -ParticipateInCeip $false -confirm:$false

Ungültige SSL Zertifikate ignorieren

Bei Verwendung selbstsignierter Zertifikate im vCenter verweigert PowerCLI die Verbindung. Dieses Verhalten kann unterdrückt werden mit dem Befehl:

Set-PowerCLIConfiguration -Scope AllUsers -InvalidCertificateAction Ignore -confirm:$false

PowerCLI Fehler – Invalid server certificate

Auf Systemen mit frisch aufgesetzter PowerCLI passiert es mir immer wieder, dass meine Skripte mit Fehler beendet werden, oder dass schon der Befehl Connect-VIServer scheitert.

Connect-VIServer Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the InvalidCertificateAction option to Prompt if you’d like to connect once or to add a permanent exception for this server

Das Problem lässt sich schnell und dauerhaft umgehen.

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

SSH im gesamten Cluster mit PowerCLI aktivieren

Dies ist eine Methode, um schnell auf einem oder mehreren Hosts im Cluster den SSH Dienst zu aktivieren.

Dienst starten

Zunächst eine PowerCLI Verbidung mit dem vCenter herstellen.

Connect-VIserver <myVC>

Der unten genannte Befehl aktiviert SSH auf allen Hosts im vCenter.

Get-VMHost | Get-VMHostService | Where Key -EQ "TSM-SSH" | Start-VMHostService

TSM steht hier für Technical Support Mode.

SSH Dienst beenden

Get-VMHost | Get-VMHostService | Where Key -EQ "TSM-SSH" |  Stop-VMHostService -Confirm:$False

Selektive Aktivierung

Man kann die Aktion auch auf einen einzelnen Host einschränken.

Get-VMHost myESX.myDomain.local | Get-VMHostService | Where Key -EQ "TSM-SSH" | Start-VMHostService

VMs ohne Tag emitteln

Backup-Tag SLA überprüfen

VMware Tags bieten vielseitige Möglichkeiten, VMs dynamisch anhand ihrer Tags zu gruppieren. Ein Anwendungsfalls sind die Verwendung von Backup-Tags, um Backup-SLA zu gewährleisten. In meinem Fall gibt es eine Kategorie mit Namen “Backup” und darunter mehrere SLA-Tags für wöchentliche, oder tägliche Backups.

Oneliner

Mittels PowerCLI lässt sich schnell ermitteln, welche VM keinen Tag gesetzt hat.

connect-viserver myVC
get-vm | ?{ (get-tagassignment $_) -eq $null}

Diese Abfrage ist aber noch nicht hinreichend. Sie ermittelt nur, welche VMs KEINE Tags haben. Ich möchte jedoch erfahren, welche VMs keine Tags der Kategorie “Backup” haben. Wir müssen dazu unsere Abfrage etwas anpassen.

get-vm | ?{ (get-tagassignment $_ -category Backup) -eq $null}

Die Kategorie “Backup” ist mit der jeweilig verwendeten Namensgebung anzupassen.