Какую версию .NET использует мой скрипт PowerShell? - PullRequest
40 голосов
/ 27 июля 2010

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

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

Ответы [ 7 ]

39 голосов
/ 28 июля 2010

В 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
16 голосов
/ 13 июля 2011

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

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

Это подробно описано в вопросе: Как запустить PowerShell со средой выполнения .NET 4? . В частности, см. Сообщение Императора XLII .

15 голосов
/ 27 июля 2010

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

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

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

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

7 голосов
/ 27 июля 2010

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

$a = [System.Reflection.Assembly]::Load("mscorlib")
$a.GetName().Version
1 голос
/ 27 июля 2010

Ознакомьтесь со статьей Эй, сценарист!Как проверить, какую версию Windows PowerShell я использую? .Он показывает, где в реестре вы можете проверить, чтобы определить это.

0 голосов
/ 01 августа 2010

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

0 голосов
/ 27 июля 2010

Я обнаружил, что вы можете искать эту информацию в каталоге 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...