Skriptfehler PowerCLI

Bei der Ausführung von Powershell oder PowerCLI Skripten kann es zu einem Problem mit der Signierung kommen. Zur Laufzeit erhält man eine Meldung wie unten dargestellt.

Die Datei <name> kann nicht geladen werden. Die Datei <name> ist nicht digital signiert. Das Skript wird auf dem System nicht ausgeführt. Weitere Informationen erhalten Sie mit „Get-Help about_signing“.

bzw. für englische Ausgabe:

The file <name> cannot be loaded. The file <name> is not digitally signed. The script will not execute on the system. Please see „Get-Help about_signing“ for more details.

Die kontrolle der Sicherheitseinstellungen von Powershell ergab, daß sie bereits auf „RemoteSigned“ gestellt wurden.

PS C:\Users> get-executionpolicy
RemoteSigned
PS C:\Users>

Was Ist also die Ursache? Das PowerCLI Skript (ein Teil von vCheck) hatte ich kurz zuvor geladen und lokal entpackt. Öffnet man die Eigenschaften des der ps1-Datei so sieht man schnell die Ursache.

Aktiviert man den Button „Zulassen“, so ist das Skript für künftige Ausführung genehmigt und der Fehler tritt nicht mehr auf.

vCheck v6

Alan Renouf hat eine neue Version des bewährten vCheck veröffentlicht. Das Script prüft ein Vielzahl an Parametern am ESX-Cluster ab und stellt diese bei Überschreitung der Grenzwerte in einem Report dar. Die aktuelle Version 6 kommt mit vielen Neuerungen. Neben neuer Optik kommt u.a. eine verbesserte Lesbarkeit in Outlook und eine modulare Organisation der Abfragen in Plugins. Diese können sehr leicht erweitert oder entfernt werden.

vSphere5: Zombie VM mit PowerCLI abschiessen

Gelegentlich kommt es vor: Eine VM läßt sich werder beenden, hart abschalten, noch neu starten. Ein sogenannter Zombie.

Unter vSphere5 funktionieren PowerCLI und ESXCLI etwas anders als unter vSphere 4.x.

Methode1: (Soft)

> $VM = Get-VM.<VM-Name>
> $esxcli = Get-EsxCli -vmhost ($VM.Host)
> $WorldID = ($esxcli.vm.process.list() | Where { $_.DisplayName -eq $VM.Name}).WorldID
> $result = $esxcli.vm.process.kill("soft", $WorldID)
> $result

Methode2: (Hard)

…und bist Du nicht willig….. 🙂

> $VM = Get-VM.<VM-Name>
> $esxcli = Get-EsxCli -vmhost ($VM.Host)
> $WorldID = ($esxcli.vm.process.list() | Where { $_.DisplayName -eq $VM.Name}).WorldID
> $result = $esxcli.vm.process.kill("hard", $WorldID)
> $result

Auch Wildcards lassen sich hier einsetzen (Achtung!):

> $VM = Get-VM.<VM-Namepart>*

Schiesst alle VMs ab, die mit dem Teilamen beginnen. Weitere Informationen zum Thema finden sich im Originalpost bei Virtu-Al. Dort befindet sich auch eine PS Funktion, die obige Befehle vereinfacht. Die Syntax ist dann reduziert auf:

Get-VM <VM-Name> | Kill-VM

Eine alternative Methode bedient sich der esxcli cmdlets

Dies ist eine moderne Abwandlung (vSphere 5) einer Methode, die ich in einem älteren Artikel unter vSphere 4.x beschrieben hatte.

connect-viserver esx1.mydomain.com

Alle aktiven VM Prozesse auflisten.

$esxcli = get-esxcli
$esxcli.vm.process.list()

Hier muss man die WorldID der Zombie-VM notieren.

Klar zum Abschuss!

$esxcli.vm.process.kill("hard", <WorldID>)

Hier ist <WorldID> durch 3867 zu ersetzen.