2010-07-27 70 views
35

我想在某些PowerShell脚本中使用.NET我将要编写 - 如何知道/声明在这些脚本运行时要处理哪个版本的.NET?哪个.NET版本是我的PowerShell脚本使用?

是否可以选择我的脚本将运行的.NET版本?

+0

截至该框架的3.5版本,它们都是向后兼容的/包含在一起的。因此,只需使用与您定位的框架版本一致的功能子集即可。 – 2010-07-27 15:27:59

回答

36

在PowerShell 2.0中,只取偷看在$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 

在PowerShell 1.0中,使用[System.Environment]::Version

PS> [Environment]::Version 

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

哪一个是.NET版本?它是CLRVersion吗? – 2014-11-26 02:40:15

+6

@Backwards_Dave是的,CLRVersion指示公共语言运行库的版本。您可以将该版本号与正在使用的.NET Framework版本相关联 - 这个SO答案http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version-数字涉及到每个 – 2014-11-26 20:37:58

6

.NET版本可以从mscorlib的版本推断。所以,你可以做在PowerShell中以下输出.NET的当前版本:

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

您不必加载mscorlib,因为它默认已经加载到应用程序域中:'([AppDomain] :: CurrentDomain.GetAssemblies()|?{$ _。GetName()。Name -eq“mscorlib”}) .GetName()。Version' – 2010-07-27 18:58:56

+2

更容易使用:[环境] ::版本 – x0n 2010-07-30 15:19:29

+2

@ x0n [环境] ::版本返回CLR版本,但mscorlib.GetName()。版本返回使用的.net框架 – 2014-05-14 17:40:54

-4

我发现,你可以看看在目录C的信息:\ WINDOWS \ Microsoft.NET \框架:

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

那个里面的目录会告诉你安装的框架的版本。

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我不认为这就是问题所在。 – svick 2014-09-15 18:14:19

+0

这个问题需要一个编程解决方案 - doh! – 2017-01-06 11:04:04

14

要获得.NET版本:

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

......这是,默认情况下,该版本的CLR的组件(System.Management.Automation.dll)下进行编译。

不,你不能选择你可以运行脚本的.NET版本。

+1

powershell.exe是硬编码加载CLR的V2.0,总是。这对v1和v2都有效。 – x0n 2010-07-30 15:18:22

+6

和powershell版本的最简洁的方式可能是:[环境] ::版本 – x0n 2010-07-30 15:19:02

+2

George_Howarth,这是不正确的。正如下面的jmh_gr指出的那样,你可以覆盖所使用的.NET版本(所以它不会被硬编码)。我需要检查PS1中.NET4程序集的版本,为此,我应用了下面发布的提示jmh_gr(.NET 1未能阅读较新的程序集类型)。运行“[System.Reflection.Assembly] :: GetExecutingAssembly()。ImageRuntimeVersion”返回v2.0.50727,但运行“[Environment] :: Version”会返回更准确的4.0.30319.296。 – 2013-02-06 10:33:15

0

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

15

......不,你不能选择哪个.NET版本可以在运行该脚本 - 乔治·霍沃斯

哇,这不是真的!您可以可以指定PowerShell使用哪种版本的.NET。关键是.NET标准应用程序配置文件,其格式为[appname] .exe.config。您可以将其放在与大多数.NET应用程序相同的目录中 - 包括PowerShell和可执行文件 - 并且CLR将自动加载配置文件中指定的任何可识别的选项。其中一个选项是您希望应用程序使用的CLR版本。

这是在问题中详细记录:How can I run PowerShell with the .NET 4 runtime?。具体见皇帝XLII的帖子。

+0

而不是皇帝XLII,尝试杰普斯蒂格尼尔森的回答http://stackoverflow.com/a/27188121。 – erroric 2015-01-23 16:36:22

相关问题