Which .NET version is my PowerShell script using?

2019-01-22 17:41发布

问题:

I'd like to use .NET in some PowerShell scripts I'm about to write -- how do I know/declare which version of .NET I'm dealing with when these scripts run?

And is it possible to choose against which version of .NET my script will run?

回答1:

On PowerShell 2.0, just take a peek at the $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, use [System.Environment]::Version:

PS> [Environment]::Version

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


回答2:

...no, you cannot choose which .NET version you can run the script under -- George Howarth

Woah, that's not true! You can specify which version of .NET that PowerShell uses. The key is the .NET standard application configuration file, which takes the form [appname].exe.config. You can drop that in the same directory as most .NET applications -- including the PowerShell and PowerShell ISE executables -- and the CLR will automatically load any recognizable options specified within the configuration file. One of those options is the CLR version you want the application to use.

This is documented in detail in the question: How can I run PowerShell with the .NET 4 runtime?. In particular, see Emperor XLII's post.



回答3:

To get the .NET version:

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

...which is, by default, the version of the CLR the assembly (System.Management.Automation.dll) compiled under.

And no, you cannot choose which .NET version you can run the script under.



回答4:

The .NET version can be inferred from the version of mscorlib. So you can do the following in PowerShell to output the current version of .NET:

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


回答5:

Check out the article Hey, Scripting Guy! How Do I Check Which Version of Windows PowerShell I'm Using?. It shows where in the registry you can check to determine this.



回答6:

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



回答7:

I've found out that you can look for that information in the directory C:\Windows\Microsoft.NET\Framework:

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

The directories inside that one will tell you the versions of the framework installed.

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