PowerShell Core и PowerShell: в чем разница?

Опубликовано: 15 Марта, 2023
PowerShell Core и PowerShell: в чем разница?

PowerShell уже много лет является важным компонентом операционной системы Windows. Хотя нет никаких признаков того, что PowerShell уходит, Microsoft продвигает альтернативу PowerShell под названием PowerShell Core. В таком случае я хотел воспользоваться возможностью, чтобы обсудить различия между PowerShell и PowerShell Core.

Я уверен, вы знаете, что PowerShell входит в состав операционной системы Windows и устанавливается по умолчанию. Напротив, PowerShell Core необходимо загружать и устанавливать отдельно. Вы можете скачать PowerShell Core с GitHub по этой ссылке.

Установка ядра PowerShell

Установка PowerShell Core — простой процесс. Как вы можете видеть на рисунке ниже, ядро PowerShell использует простой мастер установки, аналогичный мастеру большинства других приложений Windows.

Если вы посмотрите на следующий снимок экрана, вы увидите, как выглядит ядро PowerShell. Версия PowerShell, входящая в состав Windows 10, работает в окне слева, а PowerShell Core — в окне справа.

Изображение 4287
Наиболее очевидная разница между двумя окнами — это цвет фона, но если вы внимательно посмотрите на два окна, вы заметите некоторые другие детали. Во-первых, и PowerShell, и PowerShell Core содержат уведомления об авторских правах, указывающие на то, что они являются творениями Microsoft. На странице PowerShell Core GitHub создается впечатление, что PowerShell Core — это сторонний инструмент, но он официально санкционирован Microsoft.

Еще одна вещь, которую вы, вероятно, заметите на снимке экрана, — это номер версии. Версия PowerShell, поставляемая с Windows, — 5.x. Информация о версии PowerShell Core даже не описывает его как «PowerShell Core», а скорее как PowerShell 6.1.3.

Обычно, когда Microsoft предоставляет нам новую версию компонента Windows, новая версия заменяет старую версию. Однако это не относится к PowerShell. PowerShell Core — это больше, чем просто следующая версия PowerShell. На самом деле у него несколько иное предназначение.

PowerShell Core: многоплатформенность — с оговоркой

В отличие от Windows PowerShell, PowerShell Core является многоплатформенным. Ранее упомянутый сайт GitHub включает варианты загрузки для Windows, MacOS и Linux. Существуют даже версии PowerShell Core, предназначенные для работы на процессорах Arm.

Как бы ни было приятно иметь многоплатформенную версию PowerShell, важно помнить, что PowerShell изначально разрабатывался как инструмент управления для Windows. Некоторые из командлетов, связанных с Windows, на самом деле не применимы к другим платформам. Например, Windows PowerShell содержит большой набор командлетов для управления Hyper-V, но Hyper-V не работает ни в Linux, ни в MacOS. Следовательно, командлеты, связанные с Hyper-V, вероятно, не будут включены в версии PowerShell Core для Linux или MacOS.

Однако даже в версии PowerShell Core для Windows отсутствует множество командлетов (по крайней мере, на данный момент). Если вы хотите узнать, сколько командлетов отсутствует, введите следующие две команды как в PowerShell, так и в PowerShell Core. Эти команды подсчитывают общее количество доступных командлетов.

$M = Get-команда * | Измерить $M.Count

Если вы посмотрите на скриншот ниже, то увидите, что PowerShell в настоящее время включает 7678 командлетов. С другой стороны, PowerShell Core включает всего 2589 командлетов. Имейте в виду, что этот показатель основан на загруженных в данный момент модулях, но в обеих средах работали одни и те же три модуля (Microsoft.PowerShell.Management, Microsoft.PowerShell.Utility и PSReadLine).

Изображение 4288
В PowerShell Core отсутствует не только множество командлетов, но и целые модули. Если вы хотите узнать, сколько модулей отсутствует, вы можете использовать технику, аналогичную той, которую я показал вам минуту назад, чтобы выяснить это. Вместо использования командлета Get-Command мы можем использовать командлет Get-Module с параметром -ListAvailable. Вот как выглядят команды:

$M = Get-Module -ListAvailable | Измерить $M.Count

Если вы посмотрите на скриншот ниже, вы увидите, что в то время как PowerShell 5 в настоящее время сообщает о 136 модулях, PowerShell 6 имеет только 57 модулей. Другими словами, в PowerShell 5 вдвое больше модулей, чем в PowerShell 6.

Изображение 4289
Если вам интересно, какие модули отсутствуют, вы можете ввести Get-Module -ListAvailable. Это приведет к тому, что PowerShell (или PowerShell Core) отобразит имена модулей, которые в данный момент установлены.

Так почему же в PowerShell Core отсутствует так много командлетов и модулей? Как вы, наверное, знаете, Windows PowerShell основан на.NET Framework. С другой стороны, PowerShell Core основан на среде выполнения.NET Core. Поскольку среда выполнения.NET Core все еще является относительно новой, она еще не обладает такими возможностями, как.NET Framework. Тем не менее, я абсолютно не сомневаюсь, что PowerShell Core в конечном итоге будет включать в себя все модули и командлеты, которые в настоящее время существуют в PowerShell 5.

PowerShell Core не заменит PowerShell

Ранее я объяснял, что хотя PowerShell Core рассматривается как PowerShell 6, это не означает, что PowerShell 5 исчезнет. На данный момент Microsoft не может отказаться от PowerShell 5, даже если бы захотела, потому что, как вы видели, PowerShell Core в настоящее время гораздо менее мощный, чем PowerShell 5.

Microsoft продолжит работу над PowerShell Core, и однажды его возможности, вероятно, сравняются или превзойдут возможности Windows PowerShell. Однако даже в этом случае Microsoft не планирует отказываться от PowerShell 5.

В будущем Microsoft планирует предоставлять только исправления ошибок и обновления безопасности для PowerShell 5. Идея состоит в том, чтобы сделать PowerShell 5 очень стабильной и надежной платформой, которая не будет подвергаться значительным изменениям.

В то время как согласованность будет главной задачей PowerShell 5 в будущем, этого нельзя сказать о PowerShell 6. Как и PowerShell 5, PowerShell 6 будет получать обновления безопасности и исправления ошибок, но он также будет получать обновления функций. со временем. Таким образом, PowerShell 6 станет предпочтительной командной средой для тех, кто хочет иметь новейшие и самые лучшие возможности.