2010-07-27 14 views
35

Mi piacerebbe utilizzare .NET in alcuni script PowerShell che sto per scrivere - come faccio a sapere/dichiarare quale versione di .NET ho a che fare quando questi script vengono eseguiti?Quale versione .NET è il mio script PowerShell usando?

E è possibile scegliere quale versione di .NET verrà eseguita dal mio script?

+0

Fino alla versione 3.5 del framework, sono tutti compatibili all'indietro/inclusi l'uno con l'altro.Quindi, usa semplicemente il sottoinsieme di funzionalità che è coerente con la versione del framework che stai prendendo di mira. –

risposta

36

Su PowerShell 2.0, basta dare uno sguardo a variabile $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 

Su PowerShell 1.0, utilizzare [System.Environment]::Version:

PS> [Environment]::Version 

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

quale è la versione .NET? È il CLRVersion? –

+6

@Backwards_Dave Sì, CLRVersion indica la versione del Common Language Runtime. È possibile correlare tale numero di versione alla versione di .NET Framework in uso - questo SO answer http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version- numeri-relativi a ciascun –

6

La versione .NET può essere desunta dalla versione di mscorlib. Così si può fare quanto segue in PowerShell per l'uscita della versione corrente di .NET:

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

Non è necessario caricare mscorlib poiché è già caricato nel dominio dell'applicazione per impostazione predefinita: '([AppDomain] :: CurrentDomain.GetAssemblies() |? {$ _. GetName(). Name -eq" mscorlib "}) .GetName(). Version' –

+2

più semplice da usare: [ambiente] :: Versione – x0n

+2

@ x0n [ambiente] :: versione restituisce la versione CLR ma mscorlib.GetName(). La versione restituisce il framework .net in uso –

-4

ho scoperto che si può cercare le informazioni nella directory C: \ Windows \ Microsoft.NET \ Framework:

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

Le directory all'interno di questo vi diranno le versioni del framework installato.

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 Penso che sia quello che la domanda ha posto. – svick

+0

La domanda vuole una soluzione programmatica - doh! –

14

per ottenere la versione di .NET:

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

... che è, per impostazione predefinita, la versione del CLR dell'assemblea (System.Management.Automation.dll) compilato sotto.

E no, non è possibile scegliere quale versione .NET è possibile eseguire lo script in.

+1

powershell.exe è hardcoded per caricare v2.0 del CLR, sempre. Questo vale sia per v1 che per v2. – x0n

+6

e il modo più pulito per la versione in PowerShell è probabilmente: [ambiente] :: Versione – x0n

+2

George_Howarth, questo non è vero. Come jmh_gr indica di seguito è possibile sovrascrivere la versione di .NET che viene utilizzata (quindi NON è codificata). Avevo bisogno di controllare la versione di un assembly .NET4 in PS1, per fare questo ho applicato il suggerimento jmh_gr postato di seguito (.NET 1 non riusciva a leggere il nuovo tipo di assembly). Esecuzione "[System.Reflection.Assembly] :: GetExecutingAssembly(). ImageRuntimeVersion" restituisce la v2.0.50727, tuttavia l'esecuzione di "[Environment] :: Version" mi restituisce la più accurata 4.0.30319.296. –

0

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

15

... no, non è possibile scegliere quale versione di .NET è possibile eseguire lo script sotto - George Howarth

Woah, che non è vero! È possibile specificare la versione di .NET utilizzata da PowerShell. La chiave è il file di configurazione dell'applicazione standard .NET, che assume la forma [appname] .exe.config. È possibile rilasciarlo nella stessa directory della maggior parte delle applicazioni .NET, inclusi gli eseguibili di PowerShell e PowerShell ISE, e il CLR caricherà automaticamente tutte le opzioni riconoscibili specificate nel file di configurazione. Una di queste opzioni è la versione CLR che si desidera venga utilizzata dall'applicazione.

Questo è documentato in dettaglio nella domanda: How can I run PowerShell with the .NET 4 runtime?. In particolare, vedi il messaggio Emperor XLII.

+0

Invece di Emperor XLII, prova la risposta di Jeppe Stig Nielsen http://stackoverflow.com/a/27188121. – erroric

Problemi correlati