Вышел PowerShell Core 6.0 Release Candidate


На днях PowerShell Core достиг очередного рубежа – PowerShell Core 6.0 Release Candidate!

Дата финального релиза назначена на 10 января 2018 года. Читать далее

Реклама

Параметр Encoding в PowerShell Core 6.0 Beta.9


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

В PowerShell Core 6.0 Beta.9 мы получили унификацию. С одной стороны это хорошо, а с другой это breaking change — совместимость с существующими скриптами нарушается. Читать далее

pwsh — новое имя PowerShell


Продуктовая команда PowerShell Core в Microsoft произвела переименование исполнимого файла powershell.exe в pwsh.exe (pwsh для Unix). Произношение осталось прежним — powershell, если вы уже успели об этом задуматься. Читать далее

Новый атрибут ArgumentCompletions в PowerShell Core 6.0


На днях добавил новый атрибут ArgumentCompletions в PowerShell Core 6.0.

Когда он полезен? Хорошим примером служит параметер -Format командлета Get-Date , который теперь его использует.

Этот параметер может принимать стандартные значения  FileDate,  FileDateUniversal,  FileDateTime,  FileDateTimeUniversal, а также форматные строки вида «yyyyMMdd». Чтобы реализовать автоподстановку стандартных значений по Tab (tab completion или IntelliSense), применить атрибут ValidateSet не представляется возможным: он запретит форматные строки.

Единственным вариантом в версии 5 было — реализовать и зарегистрировать свой обработчик на основе IArgumentComplete. Но это достаточно громоздкое решение.

Теперь вы можете сделать так:

[parameter]
[ArgumentCompletions("FileDate", "FileDateUniversal", "ileDateTime", "FileDateTimeUniversal" )]
<span 				data-mce-type="bookmark" 				id="mce_SELREST_start" 				data-mce-style="overflow:hidden;line-height:0" 				style="overflow:hidden;line-height:0" 			></span>Format

Теперь если вы наберете Get-Date -Format и нажмете Tab, то заработает подстановка стандартных значений.
Вы сможете это попробовать уже в Beta.8 через несколько дней и это будет работать в ваших скриптах и скопилированных командлетах в PowerShell Core 6.0 RTM.

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.