PowerShell Friday: Laad PowerCLI vanuit uw eigen script

Gepubliceerd op 22 april 2016 • 3 min leestijd • 545 woorden
Als u uw PowerCLI-scripts wilt starten of alleen de cmdlets voor VMware wilt gebruiken, kunt u VMware vSphere PowerCLI starten vanuit uw startmenu…
PowerShell Friday: Laad PowerCLI vanuit uw eigen script

Als u uw PowerCLI-scripts wilt starten of alleen de cmdlets voor VMware wilt gebruiken, kunt u VMware vSphere PowerCLI starten vanuit uw startmenu. Vanuit het venster dat u krijgt, kunt u alle PowerCLI-cmdlets gebruiken die u nodig heeft of uw eigen scripts.

Maar wat als u de standaard PowerShell-instantie of PowerShell ISE wilt gebruiken om uw scripts te bewerken en uit te voeren? Vervolgens moet u zelf de modules en snapins laden, aangezien de PowerCLI-configuratie niet automatisch wordt geladen.

Wanneer u PowerCLI start, worden er veel dingen geladen en geconfigureerd. Als u alle modules kent die moeten worden geladen, kunt u dit met de hand doen. Maar als u uw scripts voor andere systemen of andere gebruikers schrijft, weet u niet zeker welke versie van PowerCLI zij gebruiken of waar zij PowerCLI hebben geïnstalleerd.

De volgende modules zijn op mijn systeem geladen:

  • VMware.VimAutomation.Core
  • VMware.VimAutomation.Vds
  • VMware.VimAutomation.Cloud
  • VMware.VimAutomation.PCloud
  • VMware.VimAutomation.Cis.Core
  • VMware.VimAutomation.Storage
  • VMware.VimAutomation.HA
  • VMware.VimAutomation.vROps
  • VMware.VumAutomation
  • VMware.VimAutomation.Licentie

Als je deze allemaal in je script wilt gebruiken, moet je de modules importeren met

Import-Module <module name>

Omdat PowerCLI nog steeds enkele PowerShell-snapins gebruikt naast de modules, is de kans groot dat u uw scripts moet bijwerken wanneer u PowerCLI bijwerkt.

Een eenvoudigere manier  

Is er dan geen makkelijkere manier? Ja, natuurlijk is dat zo.  Een eenvoudigere manier is om hetzelfde bestand te laden dat PowerCLI gebruikt om alle benodigde modules en modules te laden, namelijk “Initialize-PowerCLIenvironment.ps1”. Dit bestand bevindt zich onder de installatiemap van PowerCLI in “Scripts”. Standaard is deze binnen

C:\\Program Files (x86)\\VMware\\Infrastructure\\vSphere PowerCLI\\Scripts"

U kunt dus PowerCLI laden. C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1. Let op de ‘puntruimte’ vóór het bestand om het bestand binnen de huidige context uit te voeren om variabelen te behouden.

Omdat je er niet op kunt rekenen dat PowerCLI op de standaardlocatie is geïnstalleerd, moet je een manier vinden om de locatie te vinden. Een van deze manieren is het controleren van het register. U kunt de locatie van PowerCLI vinden in

hklm:\\software\\VMware, Inc.\\VMware vSphere PowerCLI`` (32bit Windows) or hklm:\software\wow6432node\VMware, Inc.\VMware vSphere PowerCLI``` (64bit Windows). The value to check is “InstallPath”.

The result - load PowerCLI  

The script below puts it all together. First it checks if the the core module is loaded. If not it checks the registry for the installation location. It checks the 64bits portion first. If it doesn’t find the registry key it assumes 32bit. After loading the key it adds the location and name of the PowerCLI initialization script and executes it. Then it, again, checks if the module is loaded. If it isn’t the script fails with error 99.

# +-------------------------------------------------+
# |        Laad VMware-modules als deze niet zijn geladen |
# +-------------------------------------------------+

if (!(Get-Module -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) ) {
    if (Testpad -Pad 'Register::HKEY\_LOCAL\_MACHINE\\SOFTWARE\\WOW6432Node\\VMware, Inc.\\VMware vSphere PowerCLI' ) {
        $Regkey = 'Register::HKEY\_LOCAL\_MACHINE\\SOFTWARE\\WOW6432Node\\VMware, Inc.\\VMware vSphere PowerCLI'
       
    } anders {
        $Regkey = 'Register::HKEY\_LOCAL\_MACHINE\\SOFTWARE\\VMware, Inc.\\VMware vSphere PowerCLI'
    }
    . (join-path -path (Get-ItemProperty $Regkey).InstallPath -childpath 'Scripts\\Initialize-PowerCLIenvironment.ps1')
}
if (!(Get-Module -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) ) {
    Write-Host "VMware-modules zijn niet geladen/kunnen niet worden geladen"
    Afrit 99
}

Het script is echter niet waterdicht. Als PowerCLI niet is geïnstalleerd, mislukt het lezen van het registergedeelte. Er is dus ruimte voor verbetering. Wellicht iets voor een andere keer.

Zie ook

    Follow me