PowerShell-Version prüfen mit #requires und Systemvariablen


    Tags: , ,

    $PSVersionTable gibt Auskunft über die Version von PowerShell.Die letzten Windows-Updates ent­hielten stets eine neue Ver­sion von Power­Shell, die den Funktions­umfang der Sprache meist deut­lich erwei­terte. In gemischten Umge­bungen kann man sich daher nicht darauf ver­lassen, dass alle verwendeten Cmdlets und sprach­liche Mittel auf jedem PC vorhanden sind. Eine Prüfung der Versions­nummer oder der Verfüg­barkeit von Befehlen ist hier angeraten.

    Wenn man bereits genau weiß, welche Version von PowerShell für ein bestimmtes Script erforderlich ist, dann kann man mit der Anweisung #requires verlässlich unterbinden, dass es in einer Umgebung abläuft, der die nötigen sprachlichen Voraussetzungen fehlen:

    #requires -version 3.0

    Bindet man diese Anweisung am Anfang eines Scripts ein, dann bricht PowerShell seine Ausführung mit einer entsprechenden Meldung ab, wenn nicht mindestens die Version 3.0 installiert ist.

    Ausführung von Modulen abhängig machen

    Manchmal mag nicht die Version von PowerShell das entscheidende Kriterium sein, um ein Script ausführen zu können, sondern das Vorhandensein eines bestimmten Moduls oder einer bestimmten Version davon. Hier hilft die Anweisung #requires mit dem Parameter -modules, allerdings erst ab PowerShell 3.0:

    #requires -modules Hyper-V

    In diesem Beispiel setzt ein Script das Modul Hyper-V voraus. Ist es nicht geladen, dann holt PowerShell dies automatisch nach, fehlt es auf dem System ganz, dann bricht das Script ab. Benötigt man eine bestimmte Version eines Modules, dann kann man diese in Form einer Hash-Tabelle festlegen:

    #requires -modules @{ModuleName="Hyper-V";ModuleVersion=1.1.0.0}

    Die Anweisung #requires eignet sich übrigens auch, um zu gewährleisten, dass ein Script mit administrativen Rechten ausgeführt wird (-RunAsAdministrator) oder dass ein bestimmtes Snap-in vorhanden ist (-PSSnapin).

    Versionsnummer abfragen

    Bevor man endgültig herausfindet, welche Version von PowerShell ein Script benötigt oder unter welcher ein bestimmtes Modul existiert, wird man es häufig in verschiedenen Umgebungen ausprobieren. Treten Probleme auf, die man in einer älteren Ausführung nicht umgehen kann, dann braucht man deren Systeminformationen, allen voran die Versionsnummer. Diese kann man auf mehreren Wegen ermitteln.

    Der einfachste besteht darin, den Wert der dafür zuständigen Systemvariablen $PSVersiontable abzufragen. Sie enthält eine Eigenschaft namens PSVersion, die detaillierte Informationen ausgibt:

    $PSVersionTable.PSVersion

    Möchte man herausfinden, ob erforderliche Module auf bestimmten Windows-PCs vorhanden sind, dann kann man das mit Hilfe von Get-Module erfahren:

    Get-Module Hyper-V

    Dieser Aufruf gibt zudem die Versionsnummer des Moduls aus. Zu beachten ist hier jedoch, dass ein Modul durch diesen Befehl nicht automatisch geladen wird, so dass man dies mit Hilfe von Import-Module tun muss, um sicherzugehen, dass es wirklich nicht vorhanden ist.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links