2010-07-27 2 views
35

Я хотел бы использовать .NET в некоторых сценариях PowerShell, которые я собираюсь написать - откуда я знаю/объявляю, какую версию .NET я имею в виду при запуске этих скриптов?Какая версия .NET - это мой сценарий PowerShell?

И можно ли выбрать, с какой версией .NET мой скрипт будет работать?

+0

До версии 3.5 каркаса все они совместимы с обратной связью/включены друг в друга.Поэтому просто используйте подмножество функций, совместимых с каркасной версией, на которую вы нацеливаетесь. –

ответ

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? –

+6

@Backwards_Dave Да, CLRVersion указывает версию среды выполнения общего языка. Вы можете сопоставить этот номер версии с используемой версией .NET Framework - этот ответ SO http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version- number-relate-to-each –

6

Версия .NET может быть выведена из версии mscorlib. Таким образом, вы можете сделать следующее в PowerShell для вывода текущей версии .NET:

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

Вам не нужно загружать mscorlib, поскольку он уже загружен в домен приложения по умолчанию: '([AppDomain] :: CurrentDomain.GetAssemblies() |? {$ _. GetName(). Name -eq" mscorlib "}) .GetName(). Версия –

+2

проще всего использовать: [среда] :: Версия – x0n

+2

@ x0n [enviroment] :: version возвращает версию CLR, но mscorlib.GetName(). Версии возвращает используемую инфраструктуру .net –

-4

Я узнал, что вы можете искать эту информацию в каталоге C: \ Windows \ Microsoft.NET \ Framework:

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

Я не знаю Не думаю, что это вопрос. – svick

+0

Вопрос требует программного решения - doh! –

14

Чтобы получить версию .NET:

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

..., который, по умолчанию, версия CLR сборки (System.Management.Automation.dll) составлен в соответствии с.

И нет, вы не можете выбрать, какую версию .NET вы можете запустить под сценарием.

+1

powershell.exe жестко запрограммирован для загрузки версии 2.0 CLR. Это считается как для v1, так и для v2. – x0n

+6

и самый чистый способ для версии в PowerShell, вероятно: [environment] :: Version – x0n

+2

George_Howarth, это не так. Как видно из jmh_gr, вы можете переопределить используемую версию .NET (поэтому она НЕ жестко закодирована). Мне нужно было проверить версию сборки .NET4 в PS1, для этого я применил подсказку jmh_gr, опубликованную ниже (.NET 1 не прочитал новый тип сборки). Запуск «[System.Reflection.Assembly] :: GetExecutingAssembly(). ImageRuntimeVersion" возвращает v2.0.50727, однако работает «[Environment] :: Version» возвращает мне более точное 4.0.30319.296. –

0

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

15

... нет, вы не можете выбрать, какую версию .NET вы можете запустить скрипт под - Джордж Howarth

Их, что это не так! Вы можете указать, какую версию .NET использовать в PowerShell. Ключ - это стандартный файл конфигурации приложения .NET, который принимает форму [appname] .exe.config. Вы можете отказаться от этого в том же каталоге, что и большинство приложений .NET, включая исполняемые файлы PowerShell и PowerShell ISE, и CLR автоматически загрузит любые распознаваемые параметры, указанные в файле конфигурации. Одним из таких вариантов является версия CLR, которую вы хотите использовать.

Это подробно описано в вопросе: How can I run PowerShell with the .NET 4 runtime?. В частности, см. Сообщение Императора XLII.

+0

Вместо Императора XLII попробуйте ответить Jeppe Stig Nielsen на http://stackoverflow.com/a/27188121. – erroric

Смежные вопросы