PowerShell Core 6.0 Beta.4


Вы уже можете скачать и протестировать PowerShell Core 6.0 Beta.4!

Из особо приятного — улучшена поддержка модулей Windows PowerShell. Если ещё в Beta.3 половина модулей вообще не загружалась, то сейчас около 80% модулей загружаются успешно — 96 из 113. Ждем исправления бага в .Net Core, что позволит нам загружать модули PS1XML. Первоисточник https://github.com/PowerShell/PowerShell/issues/4062.

Особо надо отметить, что теперь вы можете загружать модули Exchange и Sharepoint! Я уже попробовал их в работе — класс!

Также надо отметить, что оптимизирована работа консоли — теперь она работает быстрее за счет уменьшения количества выводимой служебной информации (esc-последовательностей).

Была добавлена конструкция для указания Unicode-символов `u{unicode-код}. Это работает не только в строковых константах, но и в именах (переменных, функций и т.п.). Первоисточник https://github.com/PowerShell/PowerShell/pull/3958.

 

PowerShell 6 -$env:PSModulePath


PowerShell 6.0 изначально разрабатывается как мультиплатформенный и портированный на Unix системы.

Windows и Unix системы изначально различаются в некоторых вещах. Например, по умолчанию Unix системы практически везде чувствительны к регистру, а Windows нет.

Это касается и переменных окружения. Если в Windows мы можем написать имя переменной окружения в любой комбинации больших и маленьких букв, то на Unix системе поиск переменной окружения будет выполняться с учётом регистра букв. Если мы хотим, чтобы скрипт работал без изменений на обеих плаформах, то используемые имена переменных окружения должны быть в точности одинаковыми и на Windows, и на Unix.

В частности PowerShell использует переменную окружения PSModulePath для поиска модулей. После обсуждения разработчики PowerShell приняли решение, что эта переменная окружения на обеих платформах должна писаться в форме — PSModulePath.

 

Путь развития PowerShell Core


В настоящее время есть два PowerShell — Windows PowerShell и PowerShell Core. Сразу возникает вопросы: как они соотносятся? что будет в будущем с каждой версией?

PowerShell Core это «fork» или ответвление Windows PowerShell сделанное в определенный момент с целью портирования на Unix системы.

Windows PowerShell базируется на .Net Framework — внутренней реализации стандарта .Net Standard компанией Microsoft. Читать далее

PowerShell Core достиг фазы Beta.3


Уже в ближайшее время вы сможете загрузить и установить PowerShell Core 6.0 Beta.3.

Выполнено множество улучшений. В частности вы можете оценить скорость загрузки — она потрясающая! А повторные запуски практически мгновенны.

Главное новшество — добавлена поддержка модулей Windows PowerShell! Это открывает огромные возможности по использования PowerShell Core.

Не всё так гладко с этим. Во-первых, PowerShell Core не поддерживает PSSnaIn модули и не будет их поддерживать — они ушли в прошлое. Во-вторых, модули в формате PS1XML из-за проблем в .Net CoreFX пока не работают, но вскоре это будет исправлено.

Многие существущие модули созданы именно в формате PSSnaIn и должны быть переделаны. Например, один из самых востребованных модулей — ActiveDirectory. Как не печально, но мы не можем его загрузить в PowerShell Core, пока разработчики его не перепишут. Я проверил модули SCCM и SharePoint — они также не работают.

Тогда я провел простой тест и попробовал загрузить все доступные модули на Windows 10 с установленным RSAT. Результат был более чем позитивным: более половины из 120 модулей загрузились!

Самое время и вам загрузить PowerShell Core 6.0 Beta.3 и протестировать модули, которые вы разработали или которыми вы просто пользуетесь. Результаты нужно разместить в теме FullCLR modules not compatible with PSCore6. Не откладывайте это на потом: PowerShell Core является следующим поколением PowerShell и в скором времени заменит Windows PowerShell — вам будет досадно, если вы не сможете ео использовать на всю мощь из-за поздно обнаруженных проблем.

PowerShell Core достиг фазы Beta.1


Развитие PowerShell Core успешно продолжается. Продуктовая группа к началу конференции Build 2017 выпустила PowerShell Core Beta.1.

Эту версию вы можете свободно скачать, установить и даже применять на практике. Было бы даже очень полезно попробовать её в своей ежедневной работе и написать свои замечения разработчикам, или даже что-то исправить самому — проект же открытый!

Всё ещё существует множество проблем, которые нужно решить. Почитайте v6.0.0-beta.1 release of PowerShellCore.

Например, внезапно, Beta.1 не работает на Windows 7 SP1. Причина банальна: PowerShell Core был переведен на .Net Core 2.0, где большое количество устаревшего API просто нет.

.Net Core 2.0 также находится в стадии активной разработки, поэтому с каждым днём всё больше API портируется на Unix и добавляется в поддержку. Вы можете опробовать .Net Core 2.0 в своих проектах и написать разработчикам свои замечания или принять участие в исправлении проблем — проект .Net Core 2.0 также открытый.

Надо особо отметить, что перевод PowerShell Core на .Net Core 2.0 расширил совместимость со старыми модулями: некоторые из них могут, внезапно, начать работать в Beta.1.

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

Исправлено множество нюансов при работе с файловыми системами на разных платформах. Работа в этом направлении продолжается. Было бы прекрасно получить замечания от сообщества уже сейчас, потому что реального опыта использования PowerShell на различных платформах пока ещё очень мало — поделитесь своим опытом и своими потребностями с разработчиками PowerShell.

В Beta.1 вы также обнаружите, что поправлена кодировка при работе с консолью: на Windows это теперь работает точно также как в Windows PowerShell. На Unix используется Utf8 (без BOM). Это обеспечивает хорошую обратную совместимость на Windows, но оставляет открытым вопрос о будущем: например, команда разработки Windows Console проводит большую работу по развитию консоли Windows и поддержке unicode-ных приложений. В тоже время нужно обязательно сохранить обратную совместимость и обеспечить работу существующих приложений.

Открытым остаётся вопрос по использованию кодировок при работе с файлами. Windows давно и полностью использует вариант Unicode Utf16LE с BOM, в то время как Unix применяет Utf8 без BOM. Сейчас продолжается большая и важная дискуссия по поводу использования кодировок в PowerShell Core — примите участие! Вопрос не так прост, как кажется на первый взгляд, поэтому ваше мнение важно для разработчиков.

 

Об использовании утверждённых глаголов в PowerShell


Как известно в PowerShell есть список утверждённых глаголов, рекомендованных для использования в именах командлетов и функций. Этот список можно получить с помощью командлета Get-Verb.

Использование утверждённых глаголов упрощает поиск и понимание назначения командлетов и функций.

Насколько эти рекомендации выполняются? Собрать общую статистику невозможно. Но  один из ведущих участников команды разработчиков Jason Shirk привёл такой пример относительно имён модулей:


$verbs = (Get-Verb).Verb; Find-Module |
? { $modName = $_.Name; $verbs |
? { $modName.StartsWith($_) } }

Этот код ищет в Интернет репозитории все модули, имена которых начинаются с утвержденного глагола. Получается около 100 модулей, в которых авторы использовали утверждённые глаголы (скорее всего) не по назначению, вводя в заблуждение пользователей или осложняя поиск необходимых модулей.

Как заключил Jason Shirk, удивительно, как много нарушений рекомендованной практики!

Будьте более аккуратны при именовании модулей, особенно если вы собираетесь опубликовать их в репозитории.

Get Exchange Server MAPI logs for following analyze


Опубликовал скрипт, о котором ещё год назад писал Анализ логов MAPIMB.

Скрипт опубликован в TechNet Gallery.

Скрипт предназначен для облегчения анализа логов MAPIoverHTTP. Он хорошо самодокументирован и не требует тут дополнительных комментариев — качайте и используйте.