2010-07-27 4 views
35

Ich möchte .NET in einigen PowerShell-Skripten verwenden, die ich schreiben möchte - wie kann ich wissen/erklären, mit welcher Version von .NET ich mich beschäftige, wenn diese Skripte ausgeführt werden?Welche .NET-Version verwendet mein PowerShell-Skript?

Und ist es möglich zu wählen, gegen welche Version von .NET mein Skript ausgeführt wird?

+0

Bis zur Version 3.5 des Frameworks sind sie alle abwärtskompatibel/inklusive untereinander.Verwenden Sie also nur die Teilmenge der Funktionen, die mit der Framework-Version übereinstimmen, auf die Sie abzielen. –

Antwort

36

Auf Powershell 2.0, nehmen Sie nur einen Blick auf die $PSVersionTable Variable:

PS> $psversiontable 

Name       Value 
----       ----- 
CLRVersion      2.0.50727.4927 
BuildVersion     6.1.7600.16385 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 

On Powershell 1.0, [System.Environment]::Version verwenden:

PS> [Environment]::Version 

Major Minor Build Revision 
----- ----- ----- -------- 
2  0  50727 4927 
+2

Welches ist die .NET-Version? Ist es die CLRVersion? –

+6

@Backwards_Dave Ja, CLRVersion gibt die Version der Common Language Runtime an. Sie können diese Versionsnummer mit der verwendeten .NET Framework-Version korrelieren - diese SO-Antwort http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version- numbers-relate-to-each –

6

Die .NET-Version kann aus der Version von mscorlib abgeleitet werden. So können Sie die aktuelle Version von .NET die folgenden in Powershell Ausgabe tun:

$a = [System.Reflection.Assembly]::Load("mscorlib") 
$a.GetName().Version 
+3

Sie müssen mscorlib nicht laden, da es bereits standardmäßig in die Anwendungsdomäne geladen wurde: '([AppDomain] :: CurrentDomain.GetAssemblies() |? {$ _. GetName(). Name -eq" mscorlib "}) .GetName(). Version' –

+2

einfacher zu verwenden: [environment] :: Version – x0n

+2

@ x0n [enviroment] :: Version gibt die CLR-Version aber mscorlib.GetName() zurück. Version gibt das verwendete .NET-Framework zurück –

-4

ich gefunden habe, dass Sie diese Informationen in das Verzeichnis C aussehen: \ Windows \ Microsoft.NET \ Framework:

cd C:\Windows\Microsoft.NET\Framework 
dir 

Die Verzeichnisse in diesem werden Ihnen die Versionen des installierten Frameworks mitteilen.

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
d----  14/07/2009  10:48   3082 
d----  14/07/2009  4:37   v1.0.3705 
d----  14/07/2009  4:37   v1.1.4322 
d----  25/06/2010  17:26   v2.0.50727 
d----  14/07/2009  10:48   v3.0 
d----  14/07/2009  10:48   v3.5 
+1

I don Ich glaube, das ist es, was die Frage gestellt hat. – svick

+0

Die Frage will eine programmatische Lösung - doh! –

14

Um die .NET-Version zu erhalten:

[System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion 

... die standardmäßig ist, wird die Version der CLR die Anordnung (System.Management.Automation.dll) zusammengestellt unter.

Und nein, Sie können nicht wählen, welche .NET-Version Sie das Skript unter ausführen können.

+1

powershell.exe ist fest programmiert, um v2.0 der CLR immer zu laden. Dies gilt sowohl für v1 als auch für v2. – x0n

+6

und der sauberste Weg für die Version in Powershell ist wahrscheinlich: [Umgebung] :: Version – x0n

+2

George_Howarth, das ist nicht wahr. Wie jmh_gr unten zeigt, können Sie die verwendete .NET-Version überschreiben (also NICHT hartcodiert). Ich musste die Version einer .NET4-Assembly in PS1 überprüfen, dazu habe ich den unten angegebenen Tipp jmh_gr angewendet (.NET 1 konnte den neueren Assembly-Typ nicht lesen). Running "[System.Reflection.Assembly] :: GetExecutingAssembly(). ImageRuntimeVersion" gibt v2.0.50727 zurück, aber die Ausführung von "[Environment] :: Version" gibt mir die genauere 4.0.30319.296 zurück. –

0

PS> [Runtime.InteropServices.RuntimeEnvironment] :: GetRuntimeDirectory()
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \

15

... nein, man kann nicht die .NET-Version wählen Sie das Skript ausführen können unter - George Howarth

Woah, das ist nicht wahr! Sie können angeben, welche Version von .NET die PowerShell verwendet. Der Schlüssel ist die Konfigurationsdatei für die .NET-Standardanwendung, die das Format [appname] .exe.config hat. Sie können das im selben Verzeichnis wie die meisten .NET-Anwendungen ablegen - einschließlich der ausführbaren Dateien PowerShell und PowerShell ISE - und die CLR lädt automatisch alle erkennbaren Optionen, die in der Konfigurationsdatei angegeben sind. Eine dieser Optionen ist die CLR-Version, die die Anwendung verwenden soll.

Dies ist ausführlich in der Frage dokumentiert: How can I run PowerShell with the .NET 4 runtime?. Insbesondere siehe Kaiser XLII Post.

+0

Anstelle von Kaiser XLII, versuchen Sie Jeppe Stig Nielsens Antwort http://stackoverflow.com/a/27188121. – erroric