2010-07-27 66 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

相關問題