Я хотел бы использовать.NET в некоторых сценариях PowerShell, которые я собираюсь записать - как я знаю/объявляю, какая версия.NET я имею дело с когда эти запущенные скрипты?
И действительно ли возможно выбрать, против которой версии.NET будет работать мой сценарий?
В 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
Чтобы получить версию .NET:
[System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion
... которая по умолчанию является версией CLR, под которой скомпилирована сборка (System.Management.Automation.dll
).
И нет, вы не можете выбрать, под какой версией .NET запускать сценарий.
Версия .NET может быть определена по версии mscorlib. Таким образом, вы можете сделать следующее в PowerShell для вывода текущей версии .NET:
$a = [System.Reflection.Assembly]::Load("mscorlib")
$a.GetName().Version
Я обнаружил, что эту информацию можно искать в каталоге 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
Прочтите статью Эй, сценарист! Как проверить, какую версию Windows PowerShell я использую? . Он показывает, где в реестре вы можете проверить это, чтобы определить это.
PS> [Runtime.InteropServices.RuntimeEnvironment] :: GetRuntimeDirectory ()
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \