Поиск по сайту:

Что будет в PowerShell 7.1


На первый взгляд PowerShell 7.1 может показаться, что в нем не так уж много изменений, но под капотом происходит гораздо больше, чем можно было бы ожидать. Существует также ряд очень полезных функций и инструментов, которые могут улучшить ваши сценарии и помочь вам разработать еще более качественные сценарии. PowerShell 7.1 был выпущен 11 ноября 2020 г. и быстро становится популярным среди ИТ-сообщества. В этой статье рассматривается ряд улучшений и улучшений, но она ни в коем случае не является исчерпывающим собранием всех улучшений.

Архитектурные изменения

Самым большим улучшением является то, что PowerShell 7.1 построен на основе только что выпущенной .NET 5. Это основная версия, которая продолжает процесс унификации, который прошла .NET с традиционными .NET и .NET Core. В .NET 5 реализованы первые шаги к единому ядру. PowerShell 7.1 использует множество улучшений производительности и языка.

Обновленные основные модули и улучшения загрузки

PowerShell 7.1 включает несколько обновлений основных модулей. Примечательно, что PSReadLine 2.1.0 теперь включает прогнозирующий IntelliSense, который представляет собой механизм прогнозирования синтаксиса, похожий на рыбью раковину. Кроме того, было внесено множество исправлений в режим vi и добавлена возможность устанавливать MaximumHistoryCount из профиля пользователя.

Чтобы улучшить загрузку модуля WinCompat, модули PowerShell 7 теперь обрабатываются с более высоким приоритетом. Это предотвращает непреднамеренную перезапись основных модулей при использовании режима WinCompat, чтобы позволить нестандартным модулям PowerShell 7 работать в обновленной версии PowerShell.

Новые возможности двигателя

Есть, конечно, несколько новых полезных функций. Основные три:

  • PSNullConditionalOperators
  • PSUnixStat
  • Поддержка TLS 1.3

Нулевые условные операторы были введены еще в PowerShell 7, но в качестве экспериментальной функции. Теперь эта функция стала основной и включена по умолчанию в PowerShell 7.1. Есть два новых оператора: ?? и ??=.

# This typically replaces an if null statement and will run the output if the value is null.
$Object ?? '$object contains a $null value'

# When the value of the conditional is null then, assign that object to the value on the right of the conditional.
$Object ??= 'This value is assigned on a $null $object'

Затем у нас есть параметр PSUnixStat, в этом файле указано, что он теперь перемещен из экспериментального, но иногда может все еще отображаться как экспериментальный. Эта функция будет доступна только в системах Linux. Вы можете узнать его статус и включить функцию, выполнив следующие действия.

# Make sure this feature is enabled, will need to restart the PowerShell session
Get-ExperimentalFeature -Name 'PSUnixFileStat' | Enable-ExperimentalFeature

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

Наконец, поддержка TLS 1.3 теперь включена в различные веб-командлеты, такие как Invoke-RestMethod и Invoke-WebRequest. Для тех, кто хочет использовать улучшения производительности и безопасности, включенные в эту новую версию TLS, и может взаимодействовать с конечной точкой, способной на это, это будет очень полезным дополнением. Если сайт поддерживает TLS 1.3, содержимое будет возвращено и согласовано по новой версии протокола.

Invoke-RestMethod -Uri '<https://mysite.com>' -SslProtocol Tls13

Дополнительные улучшения

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

  • В среде Windows Start-Process теперь будет по умолчанию включать все переменные среды из текущего сеанса. Только при использовании параметра UseNewEnvironment будет создана среда с новыми переменными процесса.
  • Команда ForEach-Object -Parallel теперь будет повторно использовать пространства выполнения. Это улучшит использование памяти и производительности. Для тех, кто обеспокоен тем, что максимальная изоляция пространства выполнения не достигается, теперь включен параметр UseNewRunspace для создания нового пространства выполнения для каждой итерации конвейера.
  • Команда Get-Random теперь включает параметр Shuffle. Это примет коллекцию, переданную в Get-Random или через InputObject, и вернет ту же коллекцию, но перемешанную по порядку.
  • Добавьте параметр AsUTC в команду Get-Date. Это упрощает использование традиционных утилит преобразования, таких как объект [DateTime].
  • Реализуйте командлет Stop-Computer для систем Linux и macOS. Это зависит от наличия двоичного файла /sbin/shutdown. Если используется ОС Linux, передается аргумент now, а если ОС — macOS, передается аргумент -P now.
  • Подобно Stop-Computer, Restart-Computer теперь реализовано для систем Linux и macOS. При этом используется двоичный код /sbin/shutdown и передается аргумент -r now.

Критические изменения

Наконец, есть несколько критических изменений. В списке есть и другие, но эти два могут повлиять на скрипты больше, чем другие.

  • Переименование FromUnixTime в UnixTimeSeconds в командлете Get-Date для разрешения ввода времени Unix может повлиять на сценарии, использующие эту функцию, и необходимо обновить.
  • Не переносите возвращаемый результат в PSObject при преобразовании ScriptBlock в типы делегатов. Это крайняя ситуация при приведении скриптового блока, когда вы хотите, чтобы тип возвращаемого значения был исходным объектом, а не приведением к PSObject.

Заключение

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