2017-12-20 4 views
2

Ich versuche, die Powershell-Version zu überprüfen und basierend auf welcher Version muss ich eine bestimmte Funktion aufgrund von Befehl und Syntax Unterschiede zwischen den verschiedenen Versionen ausführen. Ich versuche, eine Variable mit nur der Versionsnummer zum einfachen Vergleich zu erstellen. Hier ist der Code.Überprüfen Powershell-Version und führen Sie eine Funktion auf der Basis der Version

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major}} 

Switch ($PSversion) { 
    2 {V2} 
    4 {V4} 
    5 {V5} 
} 

function V2 { 
    "You have Powershell Version 2" 
} 

function V4 { 
    "You have Powershell Version 4" 
} 

function V5 { 
    "You have Powershell Version 5" 
} 

Als ich das Skript ausführen es eine leere Zeile zurückgibt, wenn ich den Inhalt der Variablen ausdrucken, erhalte ich die Nummer und eine neue Zeile. Ich habe versucht, ersetzen, um die neue Zeile loszuwerden, aber es ist immer da. Wenn ich den Variablenbefehl direkt in ein Powershell-Fenster eintrage, dann drucke ich den Inhalt der Variablen aus, ich bekomme nur die Versionsnummer, keine neue Zeile. Wenn ich das Skript vom selben Powershell-Fenster aus starte, bekomme ich nichts.

enter image description here

Jede Hilfe auf diesem würde geschätzt! Ich muss diese Methode nicht verwenden, jede Methode, die Powershell-Version zu überprüfen und eine Funktion auszuführen, die auf der Version basiert, ist alles was ich suche.

+2

Bewegen Sie den 'Schalter' Anweisung, um die Funktionen _after_ haben –

+4

Auch ein definiert Verbesserung: 'Switch ($ PSVersionTable.PSVersion.Major)' – TheIncorrigible1

+1

Allgemeiner Kommentar zu diesem Ansatz: Es ist Wette um zu prüfen, ob eine bestimmte Eigenschaft, Funktion oder was auch immer existiert, als wenn sie basierend auf der Version angenommen wird. Ich empfehle Ihnen auch, sich die Direktive ['# Requires'] (https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/requires?view=powershell-5.1) anzusehen. – iRon

Antwort

5

Zusätzlich zu @ MathiasRJessons Kommentar zum Verschieben der Funktionen in die Zeit vor ihrer Verwendung weisen Sie der Variablen $PSversion einen Skriptblock zu. Es bewertet es nicht. Diese

:

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major}} 

Sollte sein:

$PSversion = $PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major} 

Oder könnte nur sein:

$PSversion = $PSVersionTable.PSVersion.Major 
+0

Danke für die Hilfe, es funktioniert jetzt perfekt! – Brum

Verwandte Themen