7

Мой профессор компьютерных наук провел тест, и один из вопросов был «верен или нет: PowerShell работает в Windows, Mac и Linux»; правильный ответ был «ложный». Он утверждает, что PowerShell - это только вещь для Windows. Но вот пара сайтов, которые говорят иначе:

https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/

https://github.com/PowerShell/PowerShell

Так какой из них является правдой? Работает ли PowerShell для Linux и Mac, а также для Windows?

2 ответа2

10

Да.

Большая часть PowerShell - это .NET, поэтому он может работать в любой операционной системе, имеющей Common Language Runtime (CLR). В Windows это .NET Framework. Для других операционных систем (включая Linux!) Вы можете использовать CoreCLR, кроссплатформенное подмножество с открытым исходным кодом .NET Framework.

Как вы обнаружили в репозитории PowerShell на GitHub, поддерживается довольно много операционных систем и дистрибутивов. Например, вот инструкция для Ubuntu. Демонстрация (исходная страница):

PowerShell работает на Ubuntu

Можно утверждать, что не все PowerShell доступны в средах, отличных от Windows. Некоторые функции зависят от библиотек, доступных только в Windows. ParsedHtml свойство ParsedHtml в типе HtmlWebResponseObject возвращаемое Invoke-WebRequest , полезно только в Windows, поскольку оно содержит COM-объект, который поступает из неуправляемой библиотеки, а именно , mshtml.dll . На других платформах там ничего нет. И, конечно же, есть командлеты для управления системами, которые есть только в Windows, например, современные приложения (Get-AppxPackage и друзья).

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

3

В последней версии PowerShell для Macos (6 альфа) улучшена поддержка .net. Но это работает только в Сьерра-Ос. Например, это работает сейчас, где раньше не было:

$ping = New-Object System.Net.Networkinformation.ping
$ping.Send('yahoo.com', 500) # timeout 500 ms

[Net.DNS]::GetHostEntry('yahoo.com')   

Хотя цвета консоли по умолчанию ужасны (желтый для команд и т.д.).

set-psreadlineoption command darkyellow

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .