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