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 — вам будет досадно, если вы не сможете ео использовать на всю мощь из-за поздно обнаруженных проблем.

Реклама

Windows XP — живее всех живых


После вселенских разоблачений спалившихся агентов 007 компания Microsoft выпустила множество обновлений безопасности для всех версий Windows, включая Windows XP.

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

В результате нам остаётся скачивать обновления для Windows XP и ставить их только вручную. Если есть SCCM, то можно сделать пакет с обновлениями и установить их за один заход. Это не сложно: используйте ключи quiet и norestart. Рекомендую не лениться и установить эти обновления, т.к. вирусы и трояны под эти дыры уже гуляют по белу свету.

Более подробно о всех обновлениях можно прочитать с статье June 2017 security update release. В частности для Windows XP смотрите Microsoft security advisory 4025685 — в этой же статье про Windows Vista, Windows 8, or Windows Server 2003 снятых с поддержки.

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

 

О пользе -noprofile в PowerShell


В PowerShell есть параметр командной строки «-noprofile», который исключает загрузку пользовательских конфигурационных файлов.

В некоторых случаях нам не следует забывать использовать этот параметр. Например, при запуске скриптов в планировщике. Даже для пользовательских скриптов плохо зависеть от внешних непредсказуемых настроек. Если же речь идет о системных скриптах, то использование параметра «-noprofile» становится критически важным: злоумышленник может внедриться в системные скрипты и натворить плохих дел.

Изменение порта RD Gateway


Если хотите сильно «зашифроваться», то в принципе возможно изменить рабочие порты (TCP и UPD) RD Gateway. Изменения придется внести на самом сервере RD Gateway, на шлюзе публикации и в клиенте (или на ферме, где динамически формируется rdp-файл. Как это сделать описано по ссылке.

 

Прощание с Outlook Anywhare


В этом году Office 2007 исполняется 10 лет и он выходит из фазы расширенной поддержки. Это означает, что для производителя он перестаёт существовать: больше не будет никаких обновлений, даже обновлений безопасности. Также все связанные продукты перестают обеспечивать совместимость с Office 2007.

В частности Office 365 забудет про Outlook 2007 к концу 2017 года. Более того Office 365 перестанет поддерживать Outlook Anyware, или RPC over HTTP, как его ещё называют.

В 2014 году Microsoft начала переход на новый протокол MAPI over HTTP, который является заменой Outlook Anyware и имеет множество преимуществ (более быстрый, легкий и безопасный). С окончанием времени жизни Outlook 2007 необходимость в поддержке Outlook Anyware пропадает: более новые версии Outlook 2010/2013/2016 поддерживают MAPI over HTTP.

Что касается корпоративных версий Exchange Server, то поддержка Outlook Anyware в них также заканчивается. (Кстати время расширенной поддержки Exchange Server 2007 также истекает.) Это конечно формально в том смысле, что Microsoft не будет принудительно блокировать RPC over HTTP в корпоративных версиях, и компании смогут эксплуатировать текущие версии без обновлений сколько угодно долго, пока не решат обновить своё ПО.

Полезная ссылка RPC over HTTP deprecated in Office 365 on October 31, 2017.

 

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


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

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

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


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

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

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

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