Вышел 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 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 , где вы можете запросить изменения в документацию или сделать их сами. Нашли ошибку — пишите сразу, не откладывайте.

Памятка по установке RSAT


Последние версии RSAT уже не имеют msi файлов.

Установка через GUI не работает, поэтому скрипт:

$currentWU = Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" | select -ExpandProperty UseWUServer
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value 0
Restart-Service wuauserv
Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability –Online
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value $currentWU
Restart-Service wuauserv

Это отключает WSUS и грузит RSAT из Интернет. Вместо этого можно скачать ISO с FoD (Feature on Demand), распаковать и указать путь к этой директории в параметре Source.

Вышел 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. Делитесь опытом, запрашивайте новые фичи или улучшения существующих. Участвуйте в планировании следующей версии. И включайтесь в процесс разаработки — это не так сложно.

Что нового в PowerShell Core 6.2 Preview4


PowerShell Core 6.2 Preview4 это последняя предварительная версия перед выпуском релиза 6.2. (Ещё будет RC версия, сам релиз запланирован на март). Так что если вы обнаружили какие-то проблемы, то спешите сообщить в https://github.com/PowerShell/PowerShell

Последние важные изменения в репозитории:

  1. Завершен переход на Azure DevOps CIs. Проведена зачистка скриптов от старых CIs.
  2. За новогодние праздники вычищено около 30000 ошибок форматирования кода, которые рапортовал CodeFactor сервис. Осталось ещё более 70000. Сейчас публиковать изменения кода стало намного легче: практически нет замечаний по форматированию. В планах улучшить настройки CodeFactor, т.к. не все его сообщения должны быть исправлены.
  3. Документация практически вся удалена и перенесена в соответствующий репозиторий https://github.com/MicrosoftDocs/PowerShell-Docs

 

Что нового в Core 6.2 Preview4:

  1. Внесено ряд исправлений в web-командлеты (#8694, #8679)
  2. Sort-Object получил ключ Stable (#7862)
  3. Hashtable теперь case-insensitive для всех Cultures (#8566)
  4. Добавлен параметер RepeatHeader в командлет Format-Table (#8481)
  5. Добавлена поддержка enum и char типов в Format-Hex (#8191)
  6. Добавлена поддержка подсказок в случае ввода ошибочного имени команды (тестируйте и пишите отзывы) (#8458)

И ещё много чего. Полный список изменений https://github.com/PowerShell/PowerShell/releases/tag/v6.2.0-preview.4

Хостинг PowerShell


При создании приложений использующих PowerShell (хостинг PowerShell) важно понимать следующее.

  1. Для совместимости с Windows PowerShell используется PowerShell.5.ReferenceAssemblies
  2. Для совместимости с PowerShell Core используется PowerShell.SDK
  3. Для создания модулей, которые работают в обеих версиях, нужно использовать PowerShellStandard.Library

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

  1. https://docs.microsoft.com/en-us/powershell/scripting/learn/writing-portable-modules?view=powershell-6
  2. https://github.com/MicrosoftDocs/PowerShell-Docs