PowerShell 7.1 и другие новинки


Давно ничего не писал про PowerShell 7, и за это время вышла версия 7.1. Краткое описание в блоге MSFT. Эта версия основана на .Net 5.0. Таким образом, если вы заинтересованы в использовании новых возможностей этой версии .Net, вы можете установить PowerShell 7.1 и использовать их прямо из PowerShell.

Что нового в PowerShell 7.1? Не более того, что было в предварительных версиях — так что смотрите мои предыдущие посты и посты в блоге MSFT.

Это не LTS версия — время поддержки год-полтора, пока поддерживается .Net 5.0. Следующая версия 7.2 будет на основе .Net 6.0, и обе будут LTS — с поддержкой не менее 3 лет.

Не так давно вышла предварительная версия PowerShell 7.2 Preview2. Она все ещё на основе .Net 5.0, так как пока нет доступной предварительной версии .Net 6.0 (ожидаем в январе). Очень большие надежды на эту версию в смысле увеличения производительности. Команда .Net настроена решительно улучшить сценарий запуска .Net приложений. Сейчас инициализация .Net занимает слишком много времени. Так PowerShell 7 запускается почти в двое медленнее Windows PowerShell. Мы мало что можем сделать в самам PowerShell, чтобы улучшить эту ситуацию. Эти работы ослеживаются тут. Можете принять участие. Если команда .Net реализует их планы, то у нас есть шанс получить запуск PowerShell 7 даже быстрее, чем Windows PowerShell.

В PowerShell 7.2 Preview2 появилась новая возможность раскрашивания вывода на экран с помощью ANSI escape кодов. Посмотрите $PSStyle. Это экспериментальная фича. Отзывы приветствуются в GitHub репозитории PowerShell. Лично мне не нравится способ, которым это реализовано — слишком дорого (в смысле ресурсов) и слишком ограничено. Я бы ожидал увидеть поддержку цветовых схем и цветовых шаблонов (themes), что позволило бы иметь предопределенные схемы, переключать их без необходимости тратить время на создание собственных раскрасок.

Другие проекты команды MSFT, находящиеся в активной разработке.

Crescendo. Это инструмент для создания оберток обычных утилит командной строки. PowerShell, как любой шелл, всегда позволял запускать утилиты и приложения. При этом всегда было желание сделать это более удобным. В частности преобразовать вывод утилиты и объекты PowerShell. В кратце как это работает. Создаётся файл описания в формате JSON. Crescendo преобразует этот файл в модуль PowerShell, который может быть отредактирован и распространяться как законченное решение.

Хотя команда PowerShell MSFT намерена развивать этот проект, мне он кажется тупиковым путем. Можно найти немало проектов генерации PowerShell кода и даже модулей. Все они работают (если работают вообще) только в узкой сфере. Например, CDXML модули распространяемые MSFT c Windows активно используются, но пригодны только для создания оберток WMI. Идея и реализация тут просты: опираясь на стандартное представление WMI, создается CDXML файл с мета информацией, PowerShell используя эту информацию динамически генерирует модуль и создает командлеты доступные в текущей сессии.

Почему это стало возможным и работает? Потому что есть стандарт WMI. В случае утилит никаких стандартов несуществует, и тогда говорят «проблема фундаментально неразрешима». Что в свою очередь говорит о том, что любые генераторы изначально будут ограничены в возможностях. И чем больше возможностей будет в них закладываться, тем сложнее будет с ними работать. Проще говоря, Crescendo JSON файлы будет очень сложно создавать и поддерживать. Я бы выбрал другой путь…

Надеюсь, что мои рассуждения вас заинтриговали, и вы попробуете Crescendo и напишите отзывы в его репозитории. (Можете и со мной подискутировать, если есть желание развивать это направление в PowerShell.)

SecretManagement и SecretStore. Очень интересные проекты. Рекомендую посмотреть, попробовать и написать отзывы. Поторопитесь, так как выпуск первой версии намечен на январь 2021 года. История появления этих проектов проста — то как мы привыкли работать с паролями, а частности их хранение в Credetial Manager, не работает в других ОС. Поэтому нужна поддержка альтернативных хранилищей секретов (в том числе Azure) и общие командлеты для работы с этими секретами.

PSReadline. Очень рекомендую установить самую последнюю версию. И включите экспериментальные фичи. Вы уже видели Predictive IntelliSense? Там ещё много чего есть и появилось для любителей сделать рабочую среду PowerShell удобной.

PowerShellGet 3.0 Основной источник модулей PowerShell. Новая версия движется к своему релизу. Пробуйте заранее и пишите отзывы.

PSScriptAnalyzer 1.19.1 Если не использовали раньше, то попробуйте. Проект тоже открытый, так что пишите отзывы и запросы на новые фичи.

PowerShell Working Groups Это не проект, а намерение команды MSFT сделать проект ещё более открытым и более активным, вовлечь больше разработчиков. Команда PowerShell MSFT маленькая, но за ней закреплено много проектов. Как результат, команде просто не хватает ресурсов, чтобы активно работать по всем направлениям. Идея в том, чтобы объединить заинтересованных людей в рабочие группы, которые бы работали автономно и разгрузили команду MSFT. Таких рабочих групп может быть много. Так если вы активно работаете с Web-командлетами и недовлетварены их качеством и возможностями, вы можете получить возможность улучшать их будучи членом рабочей группы. Рабочие группы будут формировать уже начиная с января 20221 года. Включайтесь в работу! Это не обязательно написание кода. Прежде чем писать код, нужно понять проблему, спроектировать решение. Требуется аналитика, квалифицированное обсуждение, разработка новых возможностей, тестирование в реальной среде.

SCCM и перенаправление папок в терминальной ферме


В этом году использование технологий удаленной работы стало особенно популярным, и я уже поделился опытом эксплуатации терминальной фермы на основе Windows Server 2019 в предыдущих постах. Забыл упомянуть про один подводный камень. Если вы используете SCCM и перенаправление с помощью групповых политик папок на серверах терминальной фермы (таких как, например, Desktop и Documents), то в настройках SCCM клиента вам нужно выключить настройку «Enable user data and profiles», которая находится в Compliance Settings\Default Settings в той политике клиента, которая применяется в серверам. Если эта политика включена, то политики перенаправления папок не будут работать. Некоторые подробности можно найти на форуме. Удивительно, что новые классы WMI перекрывают настройки групповых политик, которые по определению должны иметь приоритет, но это факт.