Вышел PowerShell 7.0 Preview6


Вышла последняя предварительная версия PowerShell 7.0 перед RC, который ожидается через месяц.

Найти описание и дистрибудив можно по ссылке https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.6

Как всегда множество исправлений и несколько новинок.

Появились новые операторы — null-conditional operators.

Обновился портированный Test-Connection. Теперь он более пригодный для использования, хотя проблемы ещё остались.

Запуск Windows PowerShell из PowerShell Core происходит более корректно (в смысле поиска и загрузки модулей).

Появился более удобный механизм использования несовместимых с PowerShell Core модулей — https://github.com/PowerShell/PowerShell/pull/10973 По сути создается «удаленная» сессия, в которой запущен Windows PowerShell. Это не решает всех проблем из-за сериализации, но это работает!

Как всегда улучшена производительность в некоторыз сценариях.

Командлет Select-String получил новый параметр Culture, который позволяет не только использовать правила конретного языка для поиска, но и выполнять самый быстрый бинарный поиск (Ordinal). Рекомендую попробовать.

Целый ряд непортированных командлетов добавлены обратно для лучшей совместимости скриптов с Windows PowerShell — Get-Counter, Get-ClipboardSet-Clipboard, Out-Printer, Clear-RecycleBin, Out-GridViewShow-Command и Get-Help -ShowWindow.

Не забываем про новый Get-Error, который постоянно улучшается.

И ещё много чего найдёте по ссылке.

Реклама

AppLocker и CRL


Проверка списков отзыва сертификатов (CRL) полезная вещь позволяющая нам избежать взаимодействия с системами, у которых скомпрометирован сертификат.

Со временем политика использования сертификатов на Windows системах ужесточается. Мы все ощутили это в то время, когда RDP клиент на Windows 7 начал делать жесткие проверки сертификатов. Многие инфраструктуры пришлось тогда подчистить и подправить, чтобы пользователи не испытывали проблем с подключениями к удаленным рабочим столам.

Проверки CRL также могут вызывать проблемы — в виде задержек. Это уже было в нашем опыте с Sharepoint и Exchange серверами. Собственно это все тот же CAPI.

На днях выяснилось, что этой проблеме подвержен AppLocker. Оказывается, даже если он выключен, он всё равно работает где-то в недрах системы, пытается что-то проверять и даже провоцирует проверки сертификатов и CRL. А уж если он включен, и настроены правила Publisher, то и подавно.

Это имеет один неожиданный побочный эффект. Собственно так это и было обнаружено. Суть в том, что PowerShell имеет встроенную поддержку AppLocker, т.е. делает специальные вызовы API, чтобы проверить можно ли запускать тот или иной скрипт. Побочный эффект в том, что из-за проверок CRL в AppLocker PowerShell может работать медленнее: задержка запуска, задержки при загрузке модулей, задержки при выполнении скриптов.

Надо отметить, что эта проблема чаще всего возникает в изолированных сетях. Но иной раз и в сетях, которые просто неправильно сконфигурированы (фаервол и, особенно, DNS).

Неправильно сконфигурированные сети надо лечить.

Рекомендация для изолированных сетей простая: групповыми политиками уменьшить тайм-аут проверки CRL.

Ссылки:

Рекомендация отсюда

Обсуждение PowerShell

Обновлённый Select-String


После долгой эпопеи (это тема для отдельного поста, но история ещё не закончилась) командлет Select-String получил новый параметр Culture.

По умолчанию Select-String использует значение CurrentCulture. Это подразумевает преобразования текста в соответствии с правилами текущего языка сессии. Что если нужно выполнить поиск в файле с другим языком? Ранее у нас не было выбора. Теперь можно указать конкретный язык.

Но не только. Языковые преобразования замедляют поиск. Многие утилиты предлагают самый быстрый вариант поиска — двоичный. Теперь это возможно в Select-String! Укажите параметр Culture со значением Ordinal. Попробуйте выполнить поиск в большом лог файле, и вы убедитесь, что это быстрее.

Помимо это теперь Select-String умеет выделять цветом найденные элементы в отображаемой строке. Это включено по умолчанию. Отключить можно параметром NoEmphasis.

Наступают последние дни когда можно внести изменения в PowerShell Core перед выходом релиза 7.0. Пробуйте последние предварительные сборки и пишите замечания.