2010-07-27 13 views
35

Chciałbym użyć .NET w niektórych skryptach PowerShell, które zamierzam napisać - skąd mam wiedzieć/zadeklarować wersję wersji .NET, z którą mam do czynienia, kiedy te skrypty działają?Którą wersją .NET jest mój skrypt PowerShell?

Czy można wybrać, przeciwko której wersji .NET mój skrypt będzie działał?

+0

Do wersji 3.5 architektury, wszystkie są kompatybilne wstecznie/zawierają ze sobą.Po prostu użyj podzestawu funkcji zgodnego z docelową wersją systemu. –

Odpowiedz

36

Na PowerShell 2.0, wystarczy rzucić okiem na zmiennej $PSVersionTable:

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 

Na PowerShell 1.0, użyj [System.Environment]::Version:

PS> [Environment]::Version 

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

która z nich jest wersją .NET? Czy to CLRVersion? –

+6

@Backwards_Dave Tak, CLRVersion wskazuje wersję środowiska wykonawczego wspólnego języka. Możesz skorelować ten numer wersji z używaną wersją .NET Framework - ta odpowiedź SO http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version- number-relate-to-each –

6

Wersję .NET można wywnioskować z wersji mscorlib. Więc można wykonać następujące czynności w PowerShell do wyjścia aktualną wersję .NET:

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

Nie trzeba ładować mscorlib, ponieważ jest już domyślnie załadowany do domeny aplikacji: '([AppDomain] :: CurrentDomain.GetAssemblies() |? {$ _. GetName(). Nazwa -eq" mscorlib "}) .GetName(). Wersja ' –

+2

łatwiej po prostu użyć: [środowisko] :: Wersja – x0n

+2

@ x0n [enviroment] :: version returnts do wersji CLR, ale mscorlib.GetName(). Wersja zwraca framework .net w użyciu –

-4

ja okazało się, że można szukać tych informacji w katalogu C: \ Windows \ Microsoft.NET \ Framework:

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

Znajdujące się w nim katalogi opowiedzą o wersjach zainstalowanego frameworka.

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 Myślę, że właśnie o to pytano. – svick

+0

Pytanie wymaga rozwiązania programowego - doh! –

14

Aby uzyskać wersję .NET:

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

... co jest domyślnie wersja CLR zespół (System.Management.Automation.dll) skompilowany pod.

I nie, nie można wybrać wersji .NET, w której można uruchomić skrypt.

+1

powershell.exe jest na stałe zakodowany, aby załadować v2.0 CLR, zawsze. Odnosi się to zarówno do wersji v1, jak i v2. – x0n

+6

i najczystszy sposób na wersję w programie Power Shell to prawdopodobnie: [środowisko] :: Wersja – x0n

+2

George_Howarth, to nie jest prawda. Jak jmh_gr wskazuje poniżej, możesz zastąpić wersję .NET, która jest używana (więc NIE jest ona zakodowana na stałe). Musiałem sprawdzić wersję zestawu .NET4 na PS1, w tym celu zastosowałem końcówkę jmh_gr zamieszczoną poniżej (.NET 1 nie mógł odczytać nowszego typu zespołu). Uruchomienie "[System.Reflection.Assembly] :: GetExecutingAssembly(). ImageRuntimeVersion" zwraca v2.0.50727, jednak działa "[Środowisko] :: Wersja" zwraca mi bardziej dokładne 4.0.30319.296. –

0

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

15

... nie, nie można wybrać, która wersja .NET można uruchomić skrypt pod - George Howarth

Woah, że to nieprawda! Możesz można określić, która wersja .NET, która używa PowerShell. Kluczem jest standardowy plik konfiguracyjny aplikacji .NET, który przyjmuje postać [appname] .exe.config. Można go upuścić w tym samym katalogu, co większość aplikacji .NET - w tym pliki wykonywalne PowerShell i PowerShell ISE - a CLR automatycznie załaduje wszelkie rozpoznawalne opcje określone w pliku konfiguracyjnym. Jedną z tych opcji jest wersja CLR, z której ma korzystać aplikacja. To jest szczegółowo opisane w pytaniu: How can I run PowerShell with the .NET 4 runtime?. W szczególności zobacz posta: Emperor XLII.

+0

Zamiast Emperor XLII spróbuj odpowiedzi Jeppe Stiga Nielsena http://stackoverflow.com/a/27188121. – erroric

Powiązane problemy