Командлеты PowerShell работают в Linux dotnet? Или только Microsoft .NET?

591
Thufir

Название говорит обо всем. Википедия говорит :

Проектирование [править] Разработчики PowerShell основывали основную грамматику инструмента на POSIX 1003.2. [21]

Windows PowerShell может выполнять четыре вида именованных команд: [22]

командлеты (программы .NET Framework, предназначенные для взаимодействия с PowerShell). Сценарии PowerShell (файлы с суффиксом .ps1). Функции PowerShell. Отдельные исполняемые программы. Если команда является отдельной исполняемой программой, PowerShell запускает ее в отдельном процессе; если это командлет, он выполняется в процессе PowerShell. PowerShell предоставляет интерактивный интерфейс командной строки, в котором можно вводить команды и отображать их вывод. Пользовательский интерфейс, основанный на консоли Win32, предлагает настраиваемое завершение вкладки. PowerShell позволяет создавать псевдонимы для командлетов, которые в текстовом формате PowerShell переводят в вызовы исходных команд. PowerShell поддерживает как именованные, так и позиционные параметры для команд. При выполнении командлета,

Система расширенных типов PowerShell (ETS) основана на системе типов .NET, но с расширенной семантикой (например, наборы свойств и сторонние расширения). Например, он позволяет создавать различные представления объектов, предоставляя только подмножество полей данных, свойств и методов, а также определяя пользовательское поведение форматирования и сортировки. Эти представления отображаются на исходный объект с использованием файлов конфигурации на основе XML. [23]

который указывает на то, что .NETтребуется, и что Linux dotnetявляется недостаточным для запуска командлетов.

1
Нам нужно знать, какие командлеты вы хотите использовать. PowerShell, поддерживаемый в Linux, ограничен определенным подмножеством. Командлеты, которым требуется .NET Framework вместо .NET Core, не работают в Linux. Ramhound 6 лет назад 4

4 ответа на вопрос

4
DavidPostill

Windows PowerShell и PowerShell Core

Следующие часто задаваемые вопросы детализируют различия.

PowerShell Core является преемником Windows PowerShell 5.1 и работает в Windows, Linux и macOS.

...

  1. Будут ли все мои старые сценарии Windows PowerShell работать на PowerShell Core, то есть обратно совместима ли PowerShell Core с Windows PowerShell?

    Предыдущие обновления PowerShell были полностью обратно совместимы. Это относится только к PowerShell Core. Поскольку PowerShell Core является кроссплатформенным выпуском PowerShell, Microsoft сделала несколько компромиссов. Это означает, что вы должны протестировать каждый скрипт, чтобы убедиться, что он работает и в PowerShell Core.

  2. Будут ли все сценарии, которые я пишу для PowerShell Core, работать на всех поддерживаемых платформах?

    Базовые скрипты будут работать на всех платформах. Однако, учитывая огромные различия между поддерживаемыми платформами, вы должны протестировать каждый скрипт на всех платформах, на которых он должен работать.

  3. Все ли модули для Windows PowerShell работают на PowerShell Core?

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

  4. Могу ли я использовать все классы .NET Framework в PowerShell Core?

    Нет, PowerShell зависит от .NET Core, в котором отсутствуют многие функции .NET Framework. Например, в .NET Core отсутствуют Windows Presentation Foundation (WPF), Windows Forms и рабочий процесс Windows. Вы можете найти больше информации здесь .

(акцент мой)

Различия в источниках между версиями PowerShell - 4sysops

LOL, «Вы не одиноки. Если вы найдете официальную документацию по PowerShell 6.0, пожалуйста, добавьте сюда ссылку» -4sysops. Microsoft. Thufir 6 лет назад 0
2
postanote

Вы можете легко определить это для себя, просто посмотрев на них обоих бок о бок.

Имеется в виду доступный модуль, командлеты и т. Д.

PowerShell v6 / Core  https://docs.microsoft.com/en-us/powershell/scripting/powershell-scripting?view=powershell-6  PowerShell v6.0.1 Copyright (c) Microsoft Corporation. All rights reserved.  https://aka.ms/pscore6-docs Type 'help' to get help.  PS D:\> (Get-Command -Module *).Count 425  PS D:\> (Get-Command -Name *).Count 1483    Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.  PS C:\> (Get-Command -Module *).Count 1529  PS C:\> (Get-Command -Name *).Count 2474 

Итак, в вашем распоряжении в PSCore / v6 буквально меньше «1104» модулей и «945» командлетов . Так что, да, это зависит от того, какие вы используете и доступны ли они вообще.

Кроме того, чтобы попытаться приблизить PSCore к уровню Windows PowerShell, Microsoft выпустила пакет совместимости PowerShell. Еще...

Как сообщалось в прошлом месяце, доступен пакет совместимости Windows для ядра .NET. Это добавляет некоторые функции, отсутствующие в ядре .NET. «Эта функциональность актуальна ТОЛЬКО для компьютеров с Windows».

https://richardspowershellblog.wordpress.com/2018/01/04/windows-compatibility-pack

1
headkase

PowerShell доступен для Linux, поэтому предполагается, что сценарии сохранят как минимум большую часть и, возможно, всю свою функциональность независимо от платформы.

неверное предположение, к сожалению. Насколько я знаю, по крайней мере. Вопрос в том, что это за граница «большинство» и «может быть, все»? Thufir 6 лет назад 0
-2
uSlackr

Microsoft недавно выпустила PowerShell 6.0 для Linux и Windows. Два функционально взаимозаменяемы. Тем не менее, оба являются значительным отклонением от PowerShell 5.1 для Windows. Поэтому вы должны разработать для v 6, чтобы обеспечить совместимость.

Ваш менеджер пакетов будет обрабатывать любые зависимости.