2023-01-27 09:15:00
Почему PowerShell Core до сих пор не входит в состав Windows
Напомню, что Windows поставляется с версией #PowerShell 5.1. Она практически не развивается уже больше шести лет, а новые командлеты появляются крайне редко. Создают их сами продуктовые группы, когда приспичит. Например, Install-Language выпустили в 22H2 и портировали в 21H2.
Напротив, кросс-платформенная версия PowerShell Core (сейчас 7.х) с открытым исходным кодом развивается очень активно. Этим занимается команда PowerShell, а в обсуждении и разработке сообщество принимает весьма живое участие. Каких-то специфичных для Windows командлетов в ней может не быть. Но есть свои плюшки, например:
новые командлеты
параллельное выполнение в Foreach-Object
различные улучшения в веб-командлетах
Однако Core не входит в состав Windows, что сильно снижает ее ценность во множестве сценариев, в первую очередь корпоративных. Да и в личных целях нужно держать в уме, что нельзя будет просто взять и поделиться скриптом И все эти годы команду PowerShell мучают вопросом: когда же, ну когда же Core будут поставлять с ОС Windows!!!111
Рассказывая о планах на 2023 год, Стив Ли (руководитель команды) в очередной раз затронул эти причины. Их две: размер поставки и разница в сроках поддержки у Windows и .NET Core.
Размер поставки
В отличие от .NET Framework 4.x, кросс-платформенный .NET не входит в состав Windows. Поэтому PowerShell тащит его с собой, что выливается в 200MB. Звучит смешно на фоне комплектных магазинных приложений. Но контекст здесь в том числе и дистрибутив, а в нем даже на магазинном экономят заглушками.
Думаю, размер - меньшее из двух зол, а большее...
Различия в циклах поддержки
В долгосрочном канале LTS поддержка .NET составляет три года. Столько же у Windows 11. Казалось бы, все ок. Но в своем RFC разработчики PowerShell пишут про 5+5 лет для Windows. Потому что таков срок поддержки Windows Server 2022! Очевидно, сценарий выпуска только в клиентской Windows не рассматривается, даже в виде заглушки.
////
Таким образом, с одной стороны .NET не включают в состав ОС, потому что это сторонний компонент со своим циклом поддержки. А с другой - не позволяют команде PowerShell протащить этот самый .NET в дистрибутив. И по такому замкнутому кругу разработчики PowerShell ходят с самого начала
Их текущая идея - добавить в Windows хотя бы
нативную команду Install-PowerShell7 (не командлет, потому что PowerShell может быть выпилен). Цифра 7 выглядит спорно в долгосрочной перспективе, да и вообще преимущества перед командой winget маргинальные.
Сейчас актуальная версия PowerShell Core ставится так:
winget install --id Microsoft.Powershell --source winget
Остальные варианты в документации
4.9K views06:15