2010-07-27 17 views
35

Me gustaría usar .NET en algunos scripts de PowerShell que voy a escribir, ¿cómo puedo saber/declarar qué versión de .NET estoy tratando cuando se ejecutan estos scripts?¿Qué versión de .NET usa mi script de PowerShell?

¿Y es posible elegir contra qué versión de .NET se ejecutará mi script?

+0

Hasta la versión 3.5 del marco, todos son compatibles entre sí/inclusive entre sí.Así que solo use el subconjunto de características que sea coherente con la versión de marco a la que se dirige. –

Respuesta

36

En PowerShell 2.0, sólo echar un vistazo a la variable $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 

En PowerShell 1.0, utilice [System.Environment]::Version:

PS> [Environment]::Version 

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

¿cuál es la versión .NET? ¿Es la CLRVersion? –

+6

@Backwards_Dave Sí, CLRVersion indica la versión del tiempo de ejecución de idioma común. Puede correlacionar ese número de versión con la versión de .NET Framework en uso - esto SO answer http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version- números-relacionados-a-cada –

6

La versión de .NET se puede deducir de la versión de mscorlib. Así que usted puede hacer lo siguiente en PowerShell para dar salida a la versión actual de .NET:

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

No tiene que cargar mscorlib porque ya está cargado en el dominio de la aplicación de forma predeterminada: '([AppDomain] :: CurrentDomain.GetAssemblies() |? {$ _. GetName(). Name -eq" mscorlib "}) .GetName(). Versión ' –

+2

más fácil de usar: [environment] :: Version – x0n

+2

@ x0n [enviroment] :: version devuelve la versión CLR pero mscorlib.GetName(). Version devuelve el .NET framework en uso –

-4

he descubierto que se puede buscar esa información en el directorio C: \ Windows \ Microsoft.NET \ Framework:

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

Los directorios dentro de ese le dirá las versiones del marco instalado.

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 Creo que eso es lo que hizo la pregunta. – svick

+0

La pregunta quiere una solución programática - ¡doh! –

14

para obtener la versión .NET:

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

... que es, por defecto, la versión del CLR el conjunto (System.Management.Automation.dll) compilado bajo.

Y no, no puede elegir en qué versión de .NET puede ejecutar el script.

+1

powershell.exe está codificado para cargar v2.0 del CLR, siempre. Esto cuenta tanto para v1 como para v2. – x0n

+6

y la forma más limpia para la versión en powershell es probablemente: [environment] :: Version – x0n

+2

George_Howarth, esto no es cierto. Como jmh_gr señala a continuación, puede anular la versión de .NET que se utiliza (por lo que NO está codificada). Necesitaba verificar la versión de un ensamblado .NET4 en PS1, para hacer esto apliqué la sugerencia jmh_gr publicada a continuación (.NET 1 falló al leer el tipo de ensamblaje más nuevo). Ejecutando "[System.Reflection.Assembly] :: GetExecutingAssembly(). ImageRuntimeVersion" devuelve v2.0.50727, sin embargo, ejecuta "[Environment] :: Version" y me devuelve la 4.0.30319.296 más precisa. –

0

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

15

... no, no se puede elegir la versión .NET puede ejecutar el guión bajo - George Howarth

Woah, eso no es verdad! Usted puede especificar qué versión de .NET utiliza PowerShell. La clave es el archivo de configuración de la aplicación estándar .NET, que toma la forma [appname] .exe.config. Puede colocarlo en el mismo directorio que la mayoría de las aplicaciones .NET, incluidos los ejecutables PowerShell y PowerShell ISE, y el CLR cargará automáticamente cualquier opción reconocible especificada dentro del archivo de configuración. Una de esas opciones es la versión de CLR que desea que use la aplicación.

Esto se documenta en detalle en la pregunta: How can I run PowerShell with the .NET 4 runtime?. En particular, vea Emperor XLII.

+0

En lugar de Emperor XLII, pruebe la respuesta de Jeppe Stig Nielsen http://stackoverflow.com/a/27188121. – erroric

Cuestiones relacionadas