Wenn nach einem PowerCLI Update die VMware Sensoren nicht mehr funktionieren, kann es sein, dass Server-Eye als Local System die Module nicht mehr "sieht". Damit ein Windows Dienst PowerShell Module laden kann, müssen diese mit dem Scope "AllUsers" installiert werden. Die korrekte Aktualisierung der PowerCLI oder die Reparatur einer PowerCLI die von Server-Eye nicht gefunden wird kannst Du wie folgt durchführen:
- Sicherstellen, dass die PowerCLI Module lokal vorhanden sind mit Get-Module -ListAvailable -Name "VMware.*"
- Ein Uninstall-Module löscht bei der PowerCLI leider nur das Hauptmodul, nicht aber die Abhängigkeiten, die mit der PowerCLI kommen und die ebenfalls im korrekten Scope vorliegen müssen. Daher empfiehlt es sich aufbauend auf das Kommando im ersten Schritt, folgendes durchzuführen Get-Module -ListAvailable -Name "VMware.*" | Uninstall-Module -Force
- INFO: Sollte hier eine Meldung kommen, dass Module aktuell in Nutzung sind, so beende den Dienst "Emergency Recovery" und dann den "Sensorhub" Dienst. Beende auch alle powershell.exe Prozesse im SYSTEM Kontext. Versuche danach den Befehl erneut.
WICHTIG: Nach dem ganzen die beiden Dienste unbedingt wieder starten.
- INFO: Sollte hier eine Meldung kommen, dass Module aktuell in Nutzung sind, so beende den Dienst "Emergency Recovery" und dann den "Sensorhub" Dienst. Beende auch alle powershell.exe Prozesse im SYSTEM Kontext. Versuche danach den Befehl erneut.
- Nun kannst Du im letzten Schritt die neuste Version installieren mit Install-Module -Name VMware.PowerCLI -Scope AllUsers . Willst Du aus Kompatibilitätsgründen nur eine ganz bestimmte Version installieren kannst Du mit dem Parameter -RequiredVersion noch die explizite Versionsnummer angeben - die verfügbaren Versionen findest du hier: https://www.powershellgallery.com/packages/VMware.PowerCLI
- Beachte hierbei, den korrekten Scope mit "-Scope AllUsers" anzugeben, da die PowerCLI sonst nur für den aktuell angemeldeten Benutzer angemeldet wird und somit für den Dienst-Benutzer, über den Server-Eye zugreift weiterhin nicht verfügbar ist. Sollte trotz korrektem Scope der Sensor weiterhin nicht aufrufen können versuche einen Abruf mit psexec - wie das funktioniert findest du weiter unten im Artikel.
- Beachte außerdem, dass das System TLS 1.2 unterstützen muss, da die PowerShell-Gallery ältere Verschlüsselungsprotokolle ablehnt (Fehlermeldung: "Unable to resolve package source 'https://www.powershellgallery.com/api/v2'.") - gib in diesem Fall "[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 " in einer Admin-PowerShell ein (siehe: https://learn.microsoft.com/en-us/powershell/gallery/getting-started?view=powershellget-3.x )
- Sollte es zu Fehlermeldungen kommen, versuche auch den Aufrufparameter -force zu verwenden. Dies sorgt dafür, dass vorhandene Module ohne Warnungen oder Fehler überschrieben werden.
- Weitere Informationen zu "Install-Module" findest du hier: https://docs.microsoft.com/en-us/powershell/module/powershellget/install-module?view=powershell-7.2
Set-PowerCLIConfiguration -ParticipateInCEIP $false
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope allUsers -Confirm: $false
Drei Schritte die Dir viel Zeit und Nerven ersparen können :)
Sollte es anschließend bei der Ausführung der PowerCLI-Befehle wie "Connect-VIServer" nach der Installation zu Fehlern kommen findest du hier alle verfügbaren Versionen - es kann dann helfen, eine vorherige Version zu installieren: https://www.powershellgallery.com/packages/VMware.PowerCLI
PowerCLI mit PSExec prüfen
Auch wenn der Scope bei der Installation der PowerCLI korrekt gesetzt wurde kann es unter Umständen notwendig sein zu prüfen, ob die PowerCLI auch wirklich korrekt installiert wurde. Da der Sensor die PowerShell und damit auch die PowerCLI als System-Benutzer aufruft muss hierbei etwas getrickst werden. Dabei hilft die psexec.exe, die Bestandteil der SysInternals-Suite von Microsoft ist. Mit dieser lassen sich Prozesse als Systembenutzer starten.
- Lade die SysInternals Suite von Microsoft herunter: https://learn.microsoft.com/de-de/sysinternals/downloads/sysinternals-suite - bitte achte darauf, stets die aktuellste Version (Stand Februar 2024: Version 2.43) zu verwenden!
- Entpacke das Verzeichnis - damit psexec ohne Pfadangabe direkt aus cmd oder PowerShell heraus gestartet werden kann entpacke in das Verzeichnis C:\windows\system32 (je nachdem, wie dein Betriebssystem installiert ist) - wenn du dies nicht möchtest musst bei Aufrufen der psexec den Pfad aufrufen.
- Starte eine Windows Eingabeaufforderung oder PowerShell-Sitzung als Administrator. Dies ist nötig, da psexec bei der Ausführung den Dienst "PSEXESVC" installiert.
- Gib nun in der Windows Eingabeaufforderung oder PowerShell folgendes ein (solltest du einen anderen Pfad gewählt haben, navigiere zuvor mit der entsprechenden Konsole dort hin):
- PowerShell: .\psexec -s -i powershell
- CMD: psexec -s -i powershell
Stimme der EULA zu die nun ggf. erscheint, es wird der zuvor angesprochene Dienst "PSEXESVC" installiert. Zudem geht ein neues Fenster auf. - Gib im neuen Fenster nun "Connect-ViServer" ein, anhand der nun auftretenden Meldung kann festgestellt werden, ob die PowerCLI korrekt installiert ist. Sollte der Befehl unbekannt sein prüfe auf Schreibfehler und versuche, die PowerCLI jetzt erneut zu installieren. Ansonsten erscheint jetzt ein Information-Text von vmWare.
Sicherheitshinweis: Der Dienst PSEXESVC wird bei einem Neustart des Systems in der Regel wieder entfernt. Da der Dienst unter Umständen eine Privilege Escalation ermöglichen kann plane bitte einen Neustart ein und prüfe, ob der Dienst nach dem Neustart wirklich entfernt wurde.