Я обновляю скрипт PowerShell, который управляет некоторыми сборками .NET. Сценарий был написан для сборок, созданных на основе .NET 2 (той же версии платформы, с которой работает PowerShell), но теперь он должен работать как со сборками .NET 4, так и со сборками .NET 2.
Поскольку .NET 4 поддерживает запуск приложений, созданных на основе более старых версий инфраструктуры, кажется, что самое простое решение - запустить PowerShell со средой выполнения .NET 4, когда мне нужно запустить ее на сборках .NET 4.
Как я могу запустить PowerShell со средой выполнения .NET 4?
.net
powershell
.net-4.0
Император XLII
источник
источник
Ответы:
PowerShell (движок) отлично работает под .NET 4.0. PowerShell (консольный хост и ISE ) нет, просто потому что они были скомпилированы с более старыми версиями .NET. Существует параметр реестра, который изменит среду .NET, загруженную по всей системе , что, в свою очередь, позволит PowerShell использовать классы .NET 4.0:
Чтобы обновить только ISE для использования .NET 4.0, вы можете изменить файл конфигурации ($ psHome \ powershell_ise.exe.config), чтобы иметь такой фрагмент:
Вы можете создавать приложения .NET 4.0, которые вызывают PowerShell, используя API-интерфейс PowerShell (System.Management.Automation.PowerShell), но эти шаги помогут настроить встроенные хосты PowerShell для работы в .NET 4.0.
Удалите ключи реестра, когда они вам больше не нужны. Это ключи компьютера и принудительная миграция ВСЕХ приложений в .NET 4.0, даже приложений, использующих .net 2 и .net 3.5.
источник
Лучшее решение, которое я нашел, - это сообщение в блоге « Использование более новых версий .NET с PowerShell» . Это позволяет powershell.exe работать со сборками .NET 4.
Просто измените (или создайте),
$pshome\powershell.exe.config
чтобы оно содержало следующее:Дополнительные примечания по быстрой настройке:
Расположение и файлы зависят от платформы; Тем не менее, вы узнаете, как заставить решение работать на вас.
cd $pshome
в окне Powershell (не работает из командной строки DOS).C:\Windows\System32\WindowsPowerShell\v1.0\
powershell.exe.config
еслиPowerShell.exe
выполняется, (при необходимости создайте файл конфигурации).PowerShellISE.Exe
он запущен, вам нужно создать его конфигурационный файл какPowerShellISE.Exe.config
источник
Пожалуйста, будьте ОЧЕНЬ осторожны с использованием ключа реестра. Это машинные ключи, которые принудительно переносят ВСЕ приложения в .NET 4.0.
Многие продукты не работают при принудительной миграции, и это средство тестирования, а не механизм обеспечения качества производства. Visual Studio 2008 и 2010, MSBuild , Turbotax и множество веб-сайтов, SharePoint и т. Д. Не должны быть перенастроены.
Если вам нужно использовать PowerShell с 4.0, это следует делать для каждого приложения с помощью файла конфигурации, вам следует проконсультироваться с командой PowerShell о точной рекомендации. Это может нарушить некоторые существующие команды PowerShell.
источник
Если вам нужно выполнить только одну команду, блок сценария или файл сценария в .NET 4, попробуйте использовать файлы конфигурации активации из .NET 4, чтобы запустить только один экземпляр PowerShell с использованием версии 4 CLR.
Полная информация:
http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/
Пример модуля PowerShell:
https://gist.github.com/882528
источник
Если вы все еще застряли на PowerShell v1.0 или v2.0, вот мой вариант отличного ответа Джейсона Стангрума.
Создайте
powershell4.cmd
где-нибудь на своем пути следующее содержимое:Это позволит вам запустить экземпляр консоли powershell, работающей под .NET 4.0.
Вы можете увидеть разницу в моей системе, где у меня PowerShell 2.0, просмотрев вывод следующих двух команд, запущенных из cmd.
источник
Вот содержимое файла конфигурации, который я использовал для поддержки сборок .NET 2.0 и .NET 4:
Кроме того, вот упрощенная версия кода, совместимого с PowerShell 1.0, который я использовал для выполнения наших сценариев из переданных аргументов командной строки:
В дополнение к базовой обработке ошибок, показанной выше, мы также вводим
trap
в скрипт оператор для отображения дополнительной диагностической информации (аналогично функции разрешения ошибок Джеффри Сновера ).источник
Другие ответы - до 2012 года, и они сосредоточены на «взломе» PowerShell 1.0 или PowerShell 2.0 для нацеливания на более новые версии .NET Framework и Common Language Runtime (CLR).
Однако, как было написано во многих комментариях, с 2012 года (когда вышла PowerShell 3.0) гораздо лучшим решением будет установка самой новой версии PowerShell . Это будет автоматически предназначаться для CLR
v4.0.30319
. Это означает .NET 4.0, 4.5, 4.5.1, 4.5.2 или 4.6 (ожидается в 2015 году), поскольку все эти версии являются заменой друг друга. Использование$PSVersionTable
или увидеть определение установленной версии PowerShell нитки , если вы не уверены в версии PowerShell.На момент написания этой статьи новейшая версия PowerShell составляла 4.0, и ее можно загрузить с помощью Windows Management Framework (поисковая ссылка Google) .
источник
На самом деле вы можете заставить PowerShell работать с использованием .NET 4, не затрагивая другие приложения .NET. Мне нужно было сделать это, чтобы использовать новое свойство «Host» HttpWebRequest, однако изменение «OnlyUseLatestCLR» сломало Fiddler, поскольку его нельзя было использовать в .NET 4.
Разработчики PowerShell, очевидно, предвидели это, и они добавили раздел реестра, чтобы указать, какую версию Framework он должен использовать. Одна небольшая проблема заключается в том, что вам необходимо вступить во владение ключом реестра, прежде чем его менять, поскольку даже администраторы не имеют доступа.
Измените значение этого ключа на требуемую версию. Имейте в виду, что некоторые оснастки могут больше не загружаться, если они не совместимы с .NET 4 (WASP - единственная, с которой у меня были проблемы, но я все равно не использую ее). VMWare , SQL Server 2008 , PSCX, Active Directory (Microsoft и программное обеспечение Quest ) и SCOM работают нормально.
источник
Если вы не хотите изменять реестр или файлы app.config, альтернативный способ - создать простое консольное приложение .NET 4, которое имитирует действия PowerShell.exe и размещает PowerShell ConsoleShell.
См. Вариант 2 - хостинг Windows PowerShell самостоятельно
Сначала добавьте ссылку на сборки System.Management.Automation и Microsoft.PowerShell.ConsoleHost, которые можно найти в папке% programfiles% \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0
Затем используйте следующий код:
источник
Как и еще один вариант, последний выпуск PoshConsole включает в себя двоичные файлы, нацеленные на .NET 4 RC (которые отлично работают с версией RTM) без какой-либо настройки.
источник
Просто запустите powershell.exe с
COMPLUS_version
установленной переменной средыv4.0.30319
. Например, из cmd.exe или .bat-файла:источник