Вышел PowerShell 7.0 Preview4


Команда Microsoft определилась со сроками выпуска окончательной версии PowerShell 7.0 — в декабре RC и в январе окончательная версия на базе .Net Core 3.1. Это будет LTS версия с поддержкой на несколько лет. Собственно версии будут привязаны к выпускам LTS версий .Net Core.

PowerShell 7.0 Preview4 вполне стабильная версия и баризуется на одном из последних релизов .Net Core 3.0 Preview8.

Прямые ссылки можно найти на GitHub. Ниже только краткие комментарии об изменениях.

ForEach-Object стал заметно быстрее для большинства сценариев, включая параллелизм (параметер -Parallel). Рекомендую попробовать в реальных сценариях.

Кстати посмотрите статью PowerShell ForEach-Object Parallel Feature. Обратите внимание, что параллелизм имеет накладные расходы и не всегда приводит к ускорению.

Еще ранее появилась новая телеметрия New Telemetry in PowerShell 7 Preview 3. Надеюсь, Microsoft поделится новой статистикой. Кто ещё не видел Dashboard?

Появился Ternary Operator:

$var = $isWindows ? "Windows" : "Not Windows"

Некоторым очень хотелось это иметь в языке.

За несколько последних месяцев Кирк Манро внёс неколько улучшений в отладчик и продолжает эту работу. Если вы активно используете откладчик, то подключайтесь к процессу — обратная связь всегда полезна.

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

Продолжаю работать на улучшениями в PowerShell Core. Уже целая пачкаа улучшений производительности добавлена. Несколько ожидают одобрения и в планах ещё несколько. Результатом должно стать ускорение запуска и создания runspace (что важно для параллелизма).

Реклама

Совместимость модулей с PowerShell Core


Этим летом мы могли убедиться, что в последних версиях Windows появился целый ряд модулей совместимых с PowerShell Core.

Их легко определить на наличию строки CompatiblePSEditions = @(‘Desktop’,’Core’) в файле манифеста. (Речь о модулях в папке C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ )

Приближается время выпуска новой версии PowerShell Core 7.0, и самое время протестировать стандартные модули Windows, которыми вы пользуетесь? на совместимость с этой версией, тем более что только что появилась предварительная версия 7.0 Preview4.

Что делать, если выявлены проблемы совместимости? Создавайте обращение в репозитории https://github.com/PowerShell/WindowsCompatibility. Для модулей третьих лиц пишите разработчикам. Чем раньше, тем лучше.

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

Вышел PowerShell 7.0 Preview2


Стоит попробовать его в деле!

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

Помимо улучшений производительности полученных из Net Core 3.0 Preview6 в самом PowerShell Core добавлено несколько коммитов, которые также улучшают производительность.

Так Foreach-Object в некоторых случаях будет работать вдвое быстрее! Также можно сказать о WildcardPattern.IsMatch(). Последний используется в нескольких местах в движке, который также стал бастрее, например, при файловых операциях глоббинга. Там также есть ещё несколько улучшений производительности для файловых операций.

Из функциональных добавлений DBNull.Value и NullString.Value теперь работают точно также как $null, что полезно при работе с базами данных.

-split оператор теперь понимает отрицательный параметр, чтобы выполнять разбиение строки от конца к началу. https://github.com/PowerShell/PowerShell/pull/8960

Для разработчиков теперь работает dotnet tool install —global PowerShell — вы получите версию 6.2.2 как глобальный инструмент. https://devblogs.microsoft.com/powershell/introducing-powershell-as-net-global-tool/

Теперь не нужно спецально замерять время выполнения команды в консоли: Get-History покажет вам поле Duration!

Get-History

  Id     Duration CommandLine
  --     -------- -----------
   1        6.153 [io.Directory]::GetFileSystemEntries
   2        0.416 [io.Directory]::GetFileSystemEntries("./")

Командлет Set-Service имеет параметер SecurityDescriptorSddl для установки прав.

Теперь можно использовать зарезервированные имена для имен методов, функций и ресурсов.

Если вы часто использете COM на Windows, то оцените возможность увидеть сигнатуру метода. Ранее это работало только для обычных методов

$shell = New-Object -ComObject "Shell.Application"
$shell.AddToRecent

OverloadDefinitions
-------------------
void AddToRecent (Variant varFile, string bstrCategory)

В основной код вошли TempDrive: и UseAbbreviationExpansion. Первое интуитивно понятно. Второе позволяет вещи вроде:

gcm -UseAbbreviationExpansion i-psdf

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Import-PowerShellDataFile                          6.1.0.0    Microsoft.PowerShell.Utility

Остальное можно найти на сайте GitHub https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.2

Вышел PowerShell 7.0 Preview1


Страница загрузки https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.1

Там же вы найдете список последних изменений. Некоторые очень полезные. Например, сделана оптимизация работы с объектами в движке, что делает его быстрее, в некоторых сценариях это очень заметно. Ожидаем еще несколько важных улучшений производительности. О других изменениях я уже писал ранее, смотрите предыдущие посты.

Почему 7.0, а не 6.3? Читаем в блоге команды https://devblogs.microsoft.com/powershell/the-next-release-of-powershell-powershell-7/. По сути происходит очередной этап миграции платформы: после .Net Core 3.0 следующая версия будет 5.0, и она окончательно заменит .Net Framework (последняя версия будет 4.8), PowerShell 7.0 это шаг в том же направлении — заменить Windows PowerShell 5. Последующие выпуски PowerShell будут привязаны к выпускам .Net, в том числе LTS (Long Term Servicing).

Главное изменение внутри — теперь движок работает на .Net Core 3.0 Preview. Релиз .Net Core 3.0 намечен на сентябрь, значит релиз PowerShell 7.0 будет не позднее ноября.

Сейчас работа над PowerShell 7.0 будет заключаться в адаптации к .Net Core 3.0. С одной стороны можно убрать некоторый код и использовать стандарное API, которое стало доступным. С другой стороны можно использовать новые возможности, которые появились в 3.0. Например, теперь доступно WinForms, и мы вернем обратно Out-GridView (только на Windows конечно).

Если у вас есть идеи, предложения, то добро пожаловать на https://github.com/PowerShell/PowerShell/. Любой вклад идёт всем на пользу. Не думайте, что это сложно: идея, обсуждение, реализация — всё просто, и вы делаете только ту часть, которая вам важна и интересна, сообщество может подхватить и сделать остальное. Хлтя может не быстро. И это повод начать по-раньше.

Напомню также, что есть https://github.com/MicrosoftDocs/PowerShell-Docs , где вы можете запросить изменения в документацию или сделать их сами. Нашли ошибку — пишите сразу, не откладывайте.

.Net Core 3.0 и PowerShell Core


Если кратко, то в .Net Core 3.0 мы получим PowerShell Core как global tool.

Достаточно будет сделать:
dotnet tool install

Это будет работать в Docker контейнерах тоже.

Кстати (это уже совсем другая история) возможно уже в следующей предварительной версии 7.0.0 Preview1 PowerShell Core будет работать на .Net Core 3.0. Всё должно будет работать шустрее, да и набор API для разработчиков ощутимо расширяется.

Следующая версия PowerShell Core — PowerShell 7.0


Команда Microsoft официально объявила, что следующая версия PowerShell Core выйдет как PowerShell 7.0.

Основной посыл в том, что с переходом на .Net Core 3.0 пользователи получат версию почти на 90% совместимую с Windows PowerShell.

Имя PowerShell 7.0 без Core также призвано демонстрировать этот факт.

Ещё один важный момент: теперь выпуски основных версий будут следовать выпускам .Net Core. Это означает, что появятся LTS версии с увеличенным временем поддержки. Это будет стимулировать использование PowerShell Core в других продуктах. По-прежнему каждый месяц будут выходить предварительные версии для тестирования исправлений и новых функций.

Кроме этого PowerShell 7.0 в скором времени будет добавлено в Windows 10 как дополнительный компонент.

Вышел PowerShell Core 6.2


Официальный анонс https://devblogs.microsoft.com/powershell/general-availability-of-powershell-core-6-2/

Загрузить можно прямо с GitHub https://github.com/PowerShell/PowerShell#get-powershell

Либо используйте пакетные менеджеры, как описано в документации https://aka.ms/install-powershell

Все изменения зафиксированы в changelogs. (Смотрите все разделы для RC и Preview с времени предыдущего релиза 6.1!) Также посмотрите мои посты опубликованные для Preview версий.

Добавлены экспериментальные фичи, которые вы можете включить для тестирования. Рекомендую включить и посмотреть в деле Implicit Remoting Batching — возможно это именно то, чего вам всегда не хватало. Суть в том, что теперь весь pipeline выполняется на удаленной машине и возвращется только результат. В некоторых сценариях можно получить огромный выигрыш в производительности.

Кроме этого вы можете попробовать Command Not Found Suggestions, Abbreviation Expansion и Temp Drive.

Сделано множество улучшений в производительности. Так версия 6.2 запускается заметно быстрее версии 6.1.

Внесено множество улучшений в Web Cmdlets.

Не забывайте писать отзывы на GitHub. Делитесь опытом, запрашивайте новые фичи или улучшения существующих. Участвуйте в планировании следующей версии. И включайтесь в процесс разаработки — это не так сложно.