Side-By-Side и другие особенности установки PowerShell Core


С выпуском PowerShell Core 6.1.0 сложилась следующая модель установки.

Пакеты

Поддерживаются следующие пакеты:
1. MSI (Windows)
2. deb (Debian, Ubuntu)
3. rpm (Redhat)
4. pkg (MacOs)

Также есть архивные файлы Zip (tar.gz).

Установка Side-By-Side

Side-By-Side означает, что вы можете установить на одной системе несколько версий PowerShell Core.

Обычно основная версия ставится из пакета в стандартную директорию (для Windows это C:\Program Files\PowerShell\6), а остальные вы можете распаковать из zip архива в любое место.

На Windows это также обеспечивает сосуществование с Windows PowerShell.

Почему пакет устанавливает PowerShell Core в одну и ту же стандартную директорию? Это сделано специально, чтобы обеспечить обновление версий с помощью менеджеров пакетов. На Windows это также обеспечивает получение обновлений через Windows Update и WSUS (это работает для GA версий, но не для Preview/RC). По этой же причине предустановленные модули ставятся в директорию без номера версии в названии. Обновляться они будут пакетом новой версии или через Windows Update/ WSUS.

Для пакетов надо помнить, что есть две независимые ветки — GA и Preview/RC. Имена пакетов соответственно powershell и powershell-preview (для RC также powershell-preview).
Для каждой ветки пакеты устанавливаются и обновляются независимо друг от друга. Это означает, что msi пакет (это верно и других видов пакетов) для версии 6.1.0 заменит версию 6.0.x, 6.1.1 заменит 6.1.0 и т.д., но оставит без изменения любую установленную Preview/RC версию. Аналогично пакет msi для версии 6.2.x-preview1 заменит любую младшую предварительную версию, а например 6.2.0-rc1 заменит 6.2.0-preview1.

Менеджеры пакетов.

Вы можете использовать стандартные apt-get, yum, zypper, dnf. Особенность в том, что пакеты лежат только в репозитории Microsft (https://packages.microsoft.com), и его нужно предварительно зарегистрировать на системе. В документации описано, как это сделать.
В дальнейшем планируется размещение пакетов в стандартных репозиториях и, возможно, в Windows Store.

Есть также Windows Docker Files and Images https://hub.docker.com/r/microsoft/windowsservercore/ и https://hub.docker.com/r/microsoft/nanoserver/

Недавно появился Snapcraft https://snapcraft.io/powershell и https://snapcraft.io/powershell-preview

Полезные ссылки:

1. https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell?view=powershell-6
2. https://github.com/PowerShell/PowerShell/blob/master/README.md
3. https://github.com/PowerShell/PowerShell/releases/
4. https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell-core-on-linux?view=powershell-6#snap-package

Реклама

PowerShell Core 6.1.0 RC1


Приближается дата выпуска PowerShell Core 6.1.0. Предварительная дата — 13 сентября 2018 года.
А пока выпушена версия RC1 — самое время попробовать установить и сообщить о проблемах на https://github.com/PowerShell/PowerShell/
Ничего нового в RTM по сравнению с RC1 не добавится — как что стартуйте!

Загрузка https://github.com/PowerShell/PowerShell/releases/tag/v6.1.0-rc.1

1. Вы можете устанавливать предварительные версии одновременно с релизами. Это разные пакеты и они ставятся независимо. На Windows даже иконка предварительной версии будет иной. Предварительные версии имеют суффикс «-preview».
2. Добавлены пакеты в формате Snap.
3. Используется .Net Core 2.1.2 (2.1.302)
Были обнаружены некоторые проблемы производительности. Кое-что уже исправлено.
1. Одна проблема связана с OrderedDictionary класс. https://github.com/dotnet/corefx/issues/31972
Суть в том, что невозможно проверить состояние любого свойства, например, что объект пуст и не имеет добавленных элементов, без выделения памяти под внутренние структуры. PowerShell Core использует OrderedDictionary в базовом классе PSObject В результате PowerShell Core потреблял огромное количество ненужной памяти. Исправлено в [#7435](https://github.com/PowerShell/PowerShell/pull/7435).
2. Еще одна проблема с потреблением памяти и производительностью исправлена в [#7413](https://github.com/PowerShell/PowerShell/pull/7413)
В результате командлет Import-Csv стал работать быстрее до 10 раз (!) и потреблять меньше памяти.
3. Командлеты Convertfrom-Json и Invoke-RestMethod стали до 7 раз быстрее делать преобразование Json в PSObject
[#7482](https://github.com/PowerShell/PowerShell/pull/7482)
4. Значительно ускорена работа Group-Object cmdlet [#7410](https://github.com/PowerShell/PowerShell/pull/7410)
5. Было сделано еще несколько улучшений произвидительности в движке. Работа в этом направлении продолжается. Смотрите [#7112](https://github.com/PowerShell/PowerShell/issues/7112)

Что еще нового?
1. Появятся командлеты для рендеринга Markdown [6926](https://github.com/PowerShell/PowerShell/pull/6926)
Это направление работы связано с добавлением прямой поддержки файлов помощи в формате Markdown. Сейчас документация готовится в формате Markdown (https://github.com/PowerShell/PowerShell-Docs), но конвертится в MAML, чтобы мы могли использовать её в Get-Help.
2. Был удален VisualBasic из Add-Type [#7284](https://github.com/PowerShell/PowerShell/pull/7284)
Гланая мотивация — уменьшение размера дистрибутива на 5 Мб. С другой стороны мы имеем запрос на добавление поддержки F#. Посмотрим что скажут пользователи, т.е. мы с вами.
3. Была добавлена поддержка экспериментальных фичей [#7242](https://github.com/PowerShell/PowerShell/pull/7242)
Теперь в предварительных версиях возможно появление опциональных/несовместимых фичей, которые могут быть включены/выключены в конфиге для выборочного тестирования.
4. Добавлена поддержка истории в Set-Location, «cd -» — вывод предыдущей команды. [#5051](https://github.com/PowerShell/PowerShell/pull/5051)
5. Вернули акселераторы ADSI и WMI [#7085](https://github.com/PowerShell/PowerShell/pull/7085)
Собственно благодаря добавлению Windows Compatibility Pack 2.0.0 [#6958](https://github.com/PowerShell/PowerShell/pull/6958) — он оказался нужен в ядре для поддержки совместимости Windows PowerShell модулей.
6. Invoke-Item теперь работает на всех платформах [7198](https://github.com/PowerShell/PowerShell/pull/7198)
Т.е. теперь на Linux и MacOs должно работать Invoke-Item(«https://www.microsoft.com/»)
7. Теперь работает Basic Auth over HTTPS [#6890](https://github.com/PowerShell/PowerShell/pull/6890)
8. Добавлены новые командлеты для распараллеливания работы — ThreadJob модуль [#7169](https://github.com/PowerShell/PowerShell/pull/7169)
Принципиально ничего нового: используется стандартные возможности ядра, которые достаточно медленные, но стало очень удобно — попробуйте!
9. Measure-Command поддерживает скрипт-блоки [#6934](https://github.com/PowerShell/PowerShell/pull/6934)
Пример, @{prop = 3} | measure-object {$_.prop}

Там ещё много чего нового — смотрите Release Notes.

Как обычно я продолжил чистку кода. Удалено много p/invoke вызовов в FileSystem провайдере. Выполнено переформатирование Utility и Management модулей. Усправлена куча проблем в стилях и формтировании, которые репортятся в CodeFactor (StyleCop). Это работа идет медленно, так как она непроизводительная и не создает нового. Хотя приводит код в порядок и облегчает работу другим. Очень надеюсь, что удастся довести эту работу до конца в ближайшие месяцы.

Осталось напомнить, что идет процесс портирования модулей Windows. Их уже можно потестировать в последних сборках Windows 10 Preview. Читайте https://blogs.msdn.microsoft.com/powershell/2018/07/31/increased-windows-modules-coverage-with-powershell-core-6-1/ , а также попробуйте [Windows PowerShell Compatibility module](https://github.com/PowerShell/WindowsCompatibility)
Если какой-то Windows модуль не работает в PowerShell Core, то сообщить об этом можно сюда [PowerShellModuleCoverage](https://github.com/PowerShell/PowerShellModuleCoverage).

Также пишите в [основной репозиторий](https://github.com/PowerShell/PowerShell), если вы обнаружили проблемы в PowerShell Core (ошибки или плохая производительность) или имеете предложения по развитию.

PowerShell Core 6.1 Preview1


Уже пару недель как вышла первая предварительная версия PowerShell Core 6.1.

Приглашаю всех попробовать её в деле, если вы ещё не сделали это. Конечно это лучше делать осмысленно: погонять свои скрипты и поискать баги, попробовать новые фичи.

Список изменений огромный https://github.com/PowerShell/PowerShell/releases/tag/v6.1.0-preview.1

Самое примечательное на мой взгляд:

Add ForEach and Where methods to PSCustomobject (#5756)

Add Count and Length properties to PSCustomobject (#5745)

Add -settingsfile to pwsh to support loading a custom powershell config file. (#5920)

Enable conversions from PSMethod to Delegate (#5287)

Add lambda support to -replace operator (#6029)

Set pipeline thread stack size to 10MB (#6224)

Множество дополнений в Web Cmdlets

Add standard deviation implementation on Measure-Object (#6238)

PowerShell Core — улучшения в операторе диапазонов


Теперь вы можете делать:

'A'..'B' | ForEach-Object { $_ }

Особенность в том, что  "0".."9" ( ‘0’..’9′) будет по-прежнему возвращать числа как в Windows PowerShell — это более ожидаемое поведение, которое широко используется.

Первоисточник.

Новый Add-Type


Да, он готов. PowerShell Core 6.0 GA вышел с обрезанной версией. Сейчас ситуация улучшается. Главное изменение — Add-Type использует Roslyn со всеми его возможностями. Восстановлена работа всех параметров. Расширена функциональность: теперь можно откомпилировать не только один файл, как раньше, а любое количество файлов за один раз. Улучшена производительность: устранен один баг (повторная обработка исходного кода), добавлен контроль изменений исходного кода, т.е. командлет не будет второй раз компилировать и загружать код, если исходный код не изменился. Улучшены сообщения об ошибках возвращаемых компилятором.

Работа фактически завершена. Но! Возник один вопрос: с добавлением поддержки VisualBasic размер дистрибутива вырос сразу на 5МБ — это относительно много, и это беспокоит команду разработчиков. MSFT хочет получить обратную связь от пользователей: хотите ли вы иметь поддержку Visual Basic в Add-Type? Этот вопрос они будут задавать на всех ближайших конференциях.

Скажите нам, что вы думаете. Вы можете написать свое мнение прямо по ссылке. Кроме того, некоторые пользователи уже попросили добавить поддержку F# (что технически не сложно) и вернуть поддержку JS (пока не ясно, как это сделать). Выскажете своё мнение об этом тоже.

Test-Connect — нужна обратная связь


PowerShell Core 6.0 GA вышел без командлета Test-Connection. Причина была банальна: предыдущая реализация работала только на Windows, её удалили, а работу над новой, портированной, версией завершить не успели.

На днях новая версия Test-Connection была добавлена в основную ветку. В описании вы увидите, что это не только ping. Если будет интерес от пользователей, то продолжу добавлять новые возможности в этот командлет.

Вы можете (и сделайте это!) загрузить ночную сборку для Windows и попробовать командлет в действии (и другие новые фичи). Либо ждите Preview2, которая скоро должна выйти. Свои замечания оставляйте в обсуждении.

Нужно проверить дизайн и функиональную часть (работа в скрипте), а также высказать своё мнение, какой должен быть вывод на экран: должны ли мы использовать прогресс-бар или только текстовый вывод, какой должен быть текстовый вывод, должен ли он эмулировать вывод Windows команд, выводить шапку и завершающую статистику.

Должен отметить, что из-за ограничений в .Net Core версия командлета на Unix-ах работает пока с ограниченной функциональностью.