Поделиться через


Что нового в PowerShell 7.0

PowerShell 7.0 — это открытая, кроссплатформенная (Windows, macOS и Linux) версия PowerShell, созданная для управления разнородными средами и гибридным облаком.

В этом релизе мы представляем ряд новых функций, включая:

  • Параллелизация конвейера с ForEach-Object -Parallel
  • Новые операторы:
    • Тройный оператор: a ? b : c
    • Операторы цепочки конвейеров: || и &&
    • Нулевые условные операторы: ?? и ??=
  • Упрощённый и динамический обзор ошибок и Get-Error cmdlet для более простого обнаружения ошибок
  • Слой совместимости, позволяющий пользователям импортировать модули в неявной сессии Windows PowerShell
  • Автоматические уведомления о новой версии
  • Возможность вызывать ресурсы DSC напрямую из PowerShell 7 (экспериментальное)

Чтобы увидеть полный список функций и исправлений, смотрите журналы изменений.

Где я могу установить PowerShell?

В настоящее время PowerShell 7 поддерживает следующие операционные системы на x64, включая:

  • Windows 8.1 и 10
  • Windows Server 2012, 2012 R2, 2016 и 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7
  • Fedora 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

Кроме того, PowerShell 7.0 поддерживает версии ARM32 и ARM64 Debian, Ubuntu и ARM64 Alpine Linux.

Проверьте инструкции по установке для вашей предпочитаемой операционной системы — Windows, macOS или Linux.

Хотя официальная поддержка не поддерживается, сообщество также предоставляло пакеты для Arch и Kali Linux.

Замечание

Debian 10 и CentOS 8 в настоящее время не поддерживают удалённое управление WinRM. Для подробностей настройки удалённого управления на основе SSH см. раздел PowerShell Remoting over SSH.

Для получения дополнительной информации о поддерживаемых операционных системах и жизненном цикле поддержки up-toсмотрите жизненный цикл поддержки PowerShell.

Запуск PowerShell 7

PowerShell 7 устанавливается в каталог отдельно от Windows PowerShell. Это позволяет запускать PowerShell 7 параллельно с Windows PowerShell 5.1. Для PowerShell 6.x PowerShell 7 — это встроенное обновление, которое убирает PowerShell 6.x.

  • PowerShell 7 установлен на %programfiles%\PowerShell\7
  • Папка %programfiles%\PowerShell\7 добавляется в переменную $env:PATH.

Пакет установщиков PowerShell 7 обновляет предыдущие версии PowerShell 6.x:

  • PowerShell 6.x на Windows: %programfiles%\PowerShell\6 заменён на %programfiles%\PowerShell\7
  • Linux: /opt/microsoft/powershell/6 заменяется на /opt/microsoft/powershell/7
  • macOS: /usr/local/microsoft/powershell/6 заменяется на /usr/local/microsoft/powershell/7

Замечание

В Windows PowerShell исполняемый файл для запуска PowerShell называется powershell.exe. В версиях 6 и выше имя исполняемого файла изменено для поддержки выполнения параллельно. Новое исполняемое имя для запуска PowerShell 7 — pwsh.exe. Предварительные сборки остаются на месте, pwsh-preview а не pwsh в 7-предварительном каталоге.

Улучшенная обратная совместимость с Windows PowerShell

PowerShell 7.0 знаменует переход на .NET Core 3.1, обеспечивая значительно большую обратную совместимость с существующими модулями Windows PowerShell. Это включает множество модулей на Windows, требующих функциональности графического интерфейса, таких Out-GridView как и Show-Command, а также множество модулей управления ролями, которые поставляются в составе Windows.

Для Windows добавляется новый параметр коммутатора UseWindowsPowerShell в Import-Module. Этот коммутатор создаёт прокси-модуль в PowerShell 7, который использует локальный процесс Windows PowerShell для неявного запуска любых cmdlet, содержащихся в этом модуле. Для получения дополнительной информации об Import-Module.

Для получения дополнительной информации о том, какие модули Microsoft работают с PowerShell 7.0, см. таблицу совместимости модулей.

Параллельное выполнение добавлено в ForEach-Object

Cmdlet ForEach-Object , который итерирует элементы в коллекции, теперь имеет встроенный параллелизм с новым параметром Parallel .

По умолчанию параллельные блоки скриптов используют текущую рабочую директорию вызывающего, который запустил параллельные задачи.

В этом примере получается 50 000 записей журнала из 5 системных логов на локальной машине с Windows:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Параметр Parallel определяет блок скрипта, который выполняется параллельно для каждого имени входного лога.

Новый параметр ThrottleLimit ограничивает количество скрипт-блоков, работающих параллельно в данный момент времени. Значение по умолчанию равно 5.

Используйте $_ переменную для представления текущего входного объекта в блоке скрипта. Используйте $using: область для передачи ссылок на переменные к блоку скриптов.

Для получения дополнительной информации о ForEach-Object.

Оператор Ternary

PowerShell 7.0 вводит троичный оператор, который ведёт себя как упрощённый if-else оператор. Троичный оператор PowerShell тесно моделируется по синтаксису тернарного оператора C#:

<condition> ? <if-true> : <if-false>

Выражение условий всегда вычисляется, и его результат преобразуется в булевое выражение, чтобы определить, какая ветвь оценивается следующей:

  • Выражение <if-true> выполняется, если выражение <condition> имеет значение true
  • Выражение <if-false> выполняется, если выражение <condition> имеет значение false

Рассмотрим пример.

$message = (Test-Path $path) ? "Path exists" : "Path not found"

В этом примере, если путь существует, то отображается Путь существует . Если путь не существует, то отображается «Путь, который не найден ».

Для получения дополнительной информации О If.

Операторы цепочек трубопроводов

PowerShell 7 реализует &&|| и операторов для условного цепного соединения конвейеров. Эти операторы в PowerShell известны как «операторы цепочки конвейеров» и похожи на списки AND и OR в оболочках, таких bash как и zsh, а также на символы условной обработки в командной оболочке Windows (cmd.exe).

Оператор && выполняет правый конвейер, если левый конвейер выполнен успешно. И наоборот, оператор || выполняет правый конвейер, если не удалось выполнить левый конвейер.

Замечание

Эти операторы используют переменные $? и $LASTEXITCODE для определения сбоя конвейера. Это позволяет использовать их с собственными командами, а не только с командлетами или функциями.

Здесь первая команда выполняется успешно, и выполняется вторая:

Write-Output 'First' && Write-Output 'Second'
First
Second

Здесь первая команда не работает, вторая не выполняется:

Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad

Здесь первая команда выполняется успешно, вторая команда не выполняется:

Write-Output 'First' || Write-Output 'Second'
First

Здесь первая команда не работает, поэтому выполняется вторая:

Write-Error 'Bad' || Write-Output 'Second'
Write-Error 'Bad'
Second

Для получения дополнительной информации о операторах цепочек трубопроводов.

Операторы нулевого коалесцирования, присвоения и условных

PowerShell 7 включает оператора нулевого коалесценционирования, нулевого условного присвоения ??=и нулевого условного доступа ?. к элементам и ?[].??

Оператор нулевой коалесценции??

Оператор ?? нулевой коалесценции возвращает значение своего левого операнда, если он не нулевый. В противном случае он вычисляет правый операнд и возвращает результат. Оператор ?? не вычисляет правый операнд, если левый операнд равен ненулевому значению.

$x = $null
$x ?? 100
100

В следующем примере правый операнд не будет оцениваться:

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Оператор нулевого условного присвоения ?? =

Оператор ??= условного назначения null присваивает значение своего правого операнда левому операнду только в том случае, если левый операнд вычисляется в null. Оператор ??= не вычисляет правый операнд, если левый операнд равен ненулевому значению.

$x = $null
$x ??= 100
$x
100

В следующем примере правый операнд не оценивается:

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Операторы доступа для нулевого условного участника?. и? [] (Экспериментальный)

Замечание

Это экспериментальная функция под названием PSNullConditionalOperators. Для получения дополнительной информации см. раздел «Использование экспериментальных признаков».

Нулевый условный оператор допускает доступ к элементу, ?., или элементу, ?[]к своему операнду только если этот операнд вычисляется в ненулевый; в противном случае он возвращает null.

Замечание

Так как PowerShell позволяет ? быть частью имени переменной, для использования этих операторов требуется официальная спецификация имени переменной. Поэтому необходимо использовать {} вокруг имён переменных, например ${a} или когда ? является частью имени ${a?}переменной .

В следующем примере возвращается значение свойства участника Status :

$Service = Get-Service -Name 'bits'
${Service}?.status
Stopped

Следующий пример возвращает null без попытки получить доступ к имени участника Status:

$service = $Null
${Service}?.status

Аналогично, используя ?[], значение элемента возвращается:

$a = 1..10
${a}?[0]
1

А когда операнд равен null, элемент не обращается, и возвращается null:

$a = $null
${a}?[0]

Для получения дополнительной информации About_Operators.

Новый обзор ConciseView и cmdlet Get-Error

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

В ConciseView, если ошибка не связана с ошибкой скрипта или парсера, то это сообщение об ошибке одной строки:

Get-Childitem -Path c:\NotReal
Get-ChildItem: can't find path 'C:\NotReal' because it doesn't exist

Если ошибка возникает во время выполнения скрипта или является ошибкой разбора, PowerShell возвращает многострочное сообщение об ошибке, содержащее ошибку, указатель и сообщение об ошибке, показывающие, где ошибка находится в этой строке. Если терминал не поддерживает ANSI-цветные последовательности escape (VT100), то цвета не отображаются.

Отбор ошибок из скрипта

По умолчанию в PowerShell 7 представлен ConciseView. Предыдущий стандартный вид был NormalView , и его можно выбрать, установив переменную $ErrorViewпредпочтений .

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Замечание

Добавлено новое свойство ErrorAccentColor$Host.PrivateData для поддержки изменения цвета акцента сообщения об ошибке.

Новый cmdlet Get-Error предоставляет полный и детальный обзор полностью квалифицированной ошибки, когда это необходимо. По умолчанию cmdlet отображает полные детали, включая внутренние исключения, последней произошедшей ошибки.

Отображение от Get-Error

Get-Error Cmdlet поддерживает вход из конвейера с помощью встроенной переменной $Error. Get-Error отображает все конвейерные ошибки.

$Error | Get-Error

Cmdlet Get-Error поддерживает параметр Newest , позволяющий указать, сколько ошибок из текущей сессии будет отображаться.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Для получения дополнительной информации о Get-Error.

Уведомление о новой версии

PowerShell 7 использует уведомления об обновлениях, чтобы предупредить пользователей о наличии обновлений PowerShell. Раз в день PowerShell выполняет запрос к веб-службе, чтобы определить, доступна ли более новая версия.

Замечание

Проверка обновлений проводится во время первой сессии в течение заданных 24 часов. Для повышения производительности проверка обновления начинается через 3 секунды после начала сессии. Уведомление отображается только в начале следующих сессий.

По умолчанию PowerShell подписывается на один из двух различных каналов уведомлений в зависимости от версии или ветки. Поддерживаемые, общедоступные (GA) версии PowerShell возвращают уведомления только для обновленных релизов GA. Релизы Preview и Release Candidate (RC) уведомляют об обновлениях предварительных, RC и GA-релизов.

Поведение уведомления об обновлении можно изменить с помощью переменной среды $Env:POWERSHELL_UPDATECHECK. Поддерживаются следующие значения:

  • По умолчанию — это то же самое, что и отсутствие определения $Env:POWERSHELL_UPDATECHECK
    • Выпуски общедоступной версии уведомляют об обновлениях выпусков общедоступной версии
    • Предварительные выпуски и версии RC уведомляют об обновлениях для общедоступных и предварительных версий.
  • Выключение отключает функцию уведомлений об обновлении
  • LTS уведомляет только об обновлениях релизов GA с долгосрочным обслуживанием (LTS)

Замечание

Переменная $Env:POWERSHELL_UPDATECHECK окружения не существует, пока не установлена впервые.

Чтобы установить уведомление о версии только для LTS релизов:

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Чтобы установить уведомление о версии на поведение Default :

$Env:POWERSHELL_UPDATECHECK = 'Default'

Для получения дополнительной информации О уведомлениях об обновлениях.

Новая поддержка ресурсов DSC с Invoke-DSCResource (экспериментальная)

Замечание

Это экспериментальная функция под названием PSDesiredStateConfiguration.InvokeDscResource. Для получения дополнительной информации см. раздел «Использование экспериментальных признаков».

Invoke-DscResource Cmdlet запускает метод заданного ресурса PowerShell Desired State Configuration (DSC).

Этот cmdlet вызывает DSC-ресурс напрямую, не создавая конфигурационного документа. Используя этот cmdlet, продукты управления конфигурацией могут управлять Windows или Linux с помощью ресурсов DSC. Этот cmdlet также позволяет отладить ресурсы, когда движок DSC работает с включённой отладкой.

Эта команда вызывает метод Set ресурса с именем WindowsProcess и предоставляет обязательные свойства Path и Arguments для запуска указанного процесса Windows.

Invoke-DscResource -Name WindowsProcess -Method Set -ModuleName PSDesiredStateConfiguration -Property @{
  Path = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  Arguments = ''
}

Для получения дополнительной информации об Invoke-DSCResource.

Прерывные изменения и улучшения

Разрушающие изменения

  • Сделайте так, чтобы уведомления об обновлениях поддерживали LTS и каналы по умолчанию (#11132)
  • Обновление Test-Connection работать как в Windows PowerShell (#10697) (Спасибо @vexx32!)
  • Сохранить деньги? для ParenExpression, SubExpression и ArrayExpression (#11040)
  • Установите рабочий каталог на текущий каталог в Start-Job (#10920) (Спасибо @iSazonov!)
  • Сделайте так$PSCulture чтобы постоянно отражали изменения культуры во время сессии (#10138) (Спасибо @iSazonov!)

Обновления и исправления движка

  • Улучшения API точки остановки для удалённых сценариев (#11312)
  • Исправьте утечку определения класса PowerShell в другой Runspace (#11273)
  • Исправьте регрессию в форматировании, вызванную примитивом FirstOrDefault, добавленной в 7.0.0-Preview1 (#11258)
  • Дополнительные модули Microsoft для отслеживания в телеметрии PS7 (#10751)
  • Сделать одобренные функции неэкспериментальными (#11303)
  • Обновить ConciseView для использования TargetObject при необходимости (#11075)
  • Исправьте NullReferenceException в публичных методах CompletionCompleter (#11274)
  • Исправьте проверку состояния темы квартиры на платформах, не связанных с Windows (#11301)
  • Обновление PSModulePath для объединения переменных среды процесса и машины (#11276)
  • Поднять .NET Core до 3.1.0 (#11260)
  • Исправьте обнаружение $PSHOME перед $env:PATH (#11141)
  • Позвольте pwsh наследовать $env:PSModulePath и включить powershell.exe для корректного запуска (#11057)
  • Переход на .NET Core 3.1 Preview 1 (#10798)
  • Refactor refactor reparse tag checks in file system provider (#10431) (Спасибо @iSazonov!)
  • Замените CR и новую строку на 0x23CE символ в журнале скриптов (#10616)
  • Исправьте утечку ресурса, отключив обработчик событий из AppDomain.CurrentDomain.ProcessExit (#10626)
  • Добавить поддержку в ActionPreference.Break для взлома отладчика, когда генерируются сообщения Debug, Error, Information, Progress, Verbose или Warning (#8205) (Спасибо @KirkMunro!)
  • Включите запусковые надсадки панели управления в PowerShell без указания .CPL расширения. (#9828)
  • Поддержка отрицательных чисел в операторе -split (#8960) (Спасибо @ece-jacob-scott!)

Общие обновления и исправления cmdlet

  • Исправление проблемы на Raspbian при установке даты изменения файлов в UnixStat Experimental Feature (#11313)
  • Добавить -AsPlainText в ConvertFrom-SecureString (#11142)
  • Добавлена проверка версии WindowsPS для WinCompat (#11148)
  • Исправьте отчётность об ошибках в некоторых сценариях WinCompat (#11259)
  • Добавить нативный бинарный резолвер (#11032) (Спасибо @iSazonov!)
  • Обновить расчёт ширины символа для корректного соответствия символам CJK (#11262)
  • Добавить Unblock-File для macOS (#11137)
  • Исправьте регрессию в Get-PSCallStack (#11210) (Спасибо @iSazonov!)
  • Удалите автозагрузку модуля ScheduledJob при использовании cmdlets Job (#11194)
  • Добавить OutputType в Get-Error cmdlet и сохранить оригинальные имена типов (#10856)
  • Исправить null ссылку в свойстве SupportsVirtualTerminal (#11105)
  • Добавить лимит-чек в Get-WinEvent (#10648) (Спасибо @iSazonov!)
  • Исправьте время выполнения команды, чтобы StopUpstreamCommandsException не заполнялся в -ErrorVariable (#10840)
  • Установите кодировку вывода на [Console]::OutputEncoding для нативных команд (#10824)
  • Поддержка многострочных блоков кода в примерах (#10776) (Спасибо @Greg-Smulko!)
  • Добавить параметр культуры в Select-String cmdlet (#10943) (Спасибо @iSazonov!)
  • Исправьте Start-Job путь рабочего каталога с обратной чертой (#11041)
  • ConvertFrom-Json: Разворачивать коллекции по умолчанию (#10861) (Спасибо @danstur!)
  • Используйте хэш-таблицу с чувствительным к регистру для Group-Object cmdlet с -CaseSensitive и -AsHashtable коммутаторами (#11030) (Спасибо @vexx32!)
  • Обрабатывайте исключение, если перечисление файлов не удаётся при восстановлении пути для правильного корпуса (#11014)
  • Исправьте ConciseView, чтобы отображать активность вместо myCommand (#11007)
  • Позвольте веб-командорам игнорировать статусы ошибок HTTP (#10466) (Спасибо @vdamewood!)
  • Исправьте подключение нескольких CommandInfo к Get-Command (#10929)
  • Добавить Get-Counter cmdlet для Windows (#10933)
  • Пусть ConvertTo-Json рассматривают [AutomationNull]::Value и [NullString]::Value как $null (#10957)
  • Удалить скобки с IPV6 адреса для удалённого SSH (#10968)
  • Исправьте сбой, если команда, отправленная в pwsh, — это просто пустое пространство (#10977)
  • Добавлены кроссплатформенные Get-Clipboard и Set-Clipboard (#10340)
  • Исправьте установку оригинального пути объекта файловой системы так, чтобы не было дополнительного следящего слэша (#10959)
  • Поддержка $null для ConvertTo-Json (#10947)
  • Добавить Out-Printer команду в Windows (#10906)
  • Исправьте Start-Job -WorkingDirectory с пробелом (#10951)
  • Возвращает значение по умолчанию при получении null для настройки в PSConfiguration.cs (#10963) (Спасибо) (Спасибо @iSazonov!)
  • Обрабатывайте исключение ввода-вывода как незавершающее (#10950)
  • Добавьте ассемблер GraphicalHost для включения Out-GridView, Show-Command и Get-Help -ShowWindow (#10899)
  • Возьмите ComputerName через Pipeline в Get-HotFix (#10852) (Спасибо @kvprasoon!)
  • Исправьте заполнение вкладок для параметров, чтобы отображались общие параметры по доступным параметрам (#10850)
  • Исправьте GetCorrectCasedPath(), чтобы сначала проверить, возвращаются ли какие-либо записи системного файла перед вызовом First() (#10930)
  • Установите рабочий каталог на текущий каталог в Start-Job (#10920) (Спасибо @iSazonov!)
  • Измените TabExpansion2, чтобы не требовать -CursorColumn и считать $InputScript. Длина (#10849)
  • Случай обработки, когда хост не может возвращать строки или столбцы экрана (#10938)
  • Исправьте использование акцентных цветов для хостов, которые их не поддерживают (#10937)
  • Добавить Update-List команду (#10922)
  • Обновление FWLink ID для Clear-RecycleBin года (#10925)
  • При завершении вкладки пропускайте файл, если не можете прочитать атрибуты файла (#10910)
  • Добавить Clear-RecycleBin для Windows (#10909)
  • Добавьте $env:__SuppressAnsiEscapeSequences к контролю, нужно ли иметь VT escape sequence на выходе (#10814)
  • Добавьте -NoEmphasize параметр для раскраски Select-String выхода (#8963) (Спасибо @derek-xia!)
  • Добавить Get-HotFix cmdlet (#10740)
  • Сделайте Add-Type пригодными для использования в приложениях, которые размещают PowerShell (#10587)
  • Используйте более эффективный порядок оценки в LanguagePrimitives.IsNullLike() (#10781) (Спасибо @vexx32!)
  • Улучшить обработку входных потоков смешанного собрания и потоков входа в Format-Hex (#8674) (Спасибо @vexx32!)
  • Используйте преобразование типов в хэш-таблицах SSHConnection, если значение не совпадает с ожидаемым типом (#10720) (Спасибо @SeeminglyScience!)
  • Исправьте поведение Get-Content -ReadCount 0, когда -TotalCount установлен (#10749) (Спасибо @eugenesmlv!)
  • Сообщение об ошибке Reword Access denied in Get-WinEvent (#10639) (Спасибо @iSazonov!)
  • Включите завершение вкладок для назначения переменных, которые ограничены enum или типом (#10646)
  • Удалить неиспользуемое свойство удаленного удаления SourceLength, вызывающее проблемы с форматированием (#10765)
  • Добавьте -Delimiter параметр в ConvertFrom-StringData (#10665) (Спасибо @steviecoaster!)
  • Добавить позиционный параметр для ScriptBlock при использовании Invoke-Command с SSH (#10721) (Спасибо @machgo!)
  • Показывать информацию о контексте строки, если несколько строк без названия скрипта для ConciseView (#10746)
  • Добавить поддержку путей \wsl$\ к провайдеру файловой системы (#10674)
  • Добавьте отсутствующий текст токена для TokenKind.QuestionMark в парсере (#10706)
  • Установите текущий рабочий каталог каждого ForEach-Object -Parallel запускающегося скрипта в то же место, что и вызывающий скрипт. (#10672)
  • Замените api-ms-win-core-file-l1-2-2.dll на Kernell32.dll для API FindFirstStreamW и FindNextStreamW (#10680) (Спасибо @iSazonov!)
  • Доработайте, помогите отформатировать скрипт, чтобы он был более толерантен к StrictMode (#10563)
  • Добавьте -SecurityDescriptorSDDL параметр в New-Service (#10483) (Спасибо @kvprasoon!)
  • Удалить информационный вывод, консолидировать использование пинга в Test-Connection (#10478) (Спасибо @vexx32!)
  • Читайте специальные пункты репарса, не обращаясь к ним (#10662) (Спасибо @iSazonov!)
  • Прямой выход Clear-Host на терминал (#10681) (Спасибо @iSazonov!)
  • Добавьте новую строку для группировки с Format-Table и -Property (#10653)
  • Удалить [ValidateNotNullOrEmpty] из -InputObject на Get-Random, чтобы разрешить пустую строку (#10644)
  • Make suggestion system алгоритм расстояния строк нечувствительный к регистру (#10549) (Спасибо @iSazonov!)
  • Исправление null reference exception в обработке ForEach-Object -Parallel входных данных (#10577)
  • Добавить определения групповых политик PowerShell (#10468)
  • Обновите консольный хост для поддержки последовательностей управления XTPUSHSGR/XTPOPSGR VT, используемых в сценариях композибельности. (#10208)
  • Добавить параметр WorkingDirectory в Start-Job (#10324) (Спасибо @davinci26!)
  • Удалите обработчик событий, который вызывал ошибочное копирование изменений точки остановки в отладчик пространства выполнения хоста (#10503) (Спасибо @KirkMunro!)
  • Замените api-ms-win-core-job-12-1-0.dll на Kernell32.dll в Microsoft.PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Спасибо @iSazonov!)
  • Исправлен неправильный вывод для New-Service в присвоении переменных и -OutVariable (#10444) (Спасибо @kvprasoon!)
  • Исправьте глобальные проблемы с кодом выхода, параметрами командной строки и маршрутом с пробелами (#10461)
  • Исправьте рекурсию в OneDrive — измените FindFirstFileEx() на тип SafeFindHandle (#10405)
  • Пропустите автозагрузку PSReadLine на Windows, если экранный ридер NVDA активен (#10385)
  • Увеличить версии модулей, построенных с PowerShell, до 7.0.0.0 (#10356)
  • Добавьте ошибку в Add-Type, если тип с таким же названием уже существует (#9609) (Спасибо @iSazonov!)

Performance

  • Избегайте использования замыкания в Parser.SaveError (#11006)
  • Улучшение кэширования при создании новых экземпляров Regex (#10657) (Спасибо @iSazonov!)
  • Улучшить обработку встроенных данных типов PowerShell из types.ps1xml, typesV3.ps1xml и GetEvent.types.ps1xml (#10898)
  • Обновите PSConfiguration.ReadValueFromFile, чтобы сделать его быстрее и более эффективно использовать память (#10839)
  • Добавить небольшие улучшения производительности для инициализации пространства выполнения (#10569) (Спасибо @iSazonov!)
  • Сделать ForEach-Object быстрее для его часто используемых сценариев (#10454) и исправить ForEach-Object -Parallel проблему производительности во многих пространствах (#10455)

Очистка кода

  • Изменить текст комментариев и элементов в соответствии со стандартами Microsoft (#11304)
  • Проблемы со стилем уборки в Compiler.cs (#10368) (Спасибо @iSazonov!)
  • Удалите неиспользуемый конвертер типов для CommaDelimitedStringCollection (#11000) (Спасибо @iSazonov!)
  • Стиль уборки в InitialSessionState.cs (#10865) (Спасибо @iSazonov!)
  • Очистка кода для класса PSSession (#11001)
  • Уберите неработающую функцию «запустить Update-Help из Get-Help, когда Get-Help запускается впервые» (#10974)
  • Исправление проблем со стилем (#10998) (Спасибо @iSazonov!)
  • Очистка: используйте встроенный псевдоним (#10882) (Спасибо @iSazonov!)
  • Удалите неиспользуемый ключ настройки ConsolePrompting и избегайте ненужного создания строк при запросе ExecutionPolicy setting (#10985)
  • Отключить проверку уведомлений об обновлениях для ежедневных сборок (#10903) (Спасибо @bergmeister!)
  • Восстановление отладочного API потеряно в #10338 (#10808)
  • Удалите ссылку на WorkflowJobSourceAdapter, которая больше не используется (#10326) (Спасибо @KirkMunro!)
  • Очистите COM-интерфейсы в коде переходного списка, исправив атрибуты PreserveSig (#9899) (Спасибо @weltkante!)
  • Добавьте комментарий, объясняющий, почему -ia не является псевдонимом -InformationAction распространённого параметра (#10703) (Спасибо @KirkMunro!)
  • Переименуйте InvokeCommandCmdlet.cs в InvokeExpressionCommand.cs (#10659) (Спасибо @kilasuit!)
  • Добавьте незначительные очистки кода, связанные с уведомлениями об обновлениях (#10698)
  • Удалите устаревшую логику рабочего процесса из скриптов удалённой настройки (#10320) (Спасибо @KirkMunro!)
  • Обновить формат справки, чтобы использовать правильный случай (#10678) (Спасибо @tnieto88!)
  • Очистите проблемы в стиле CodeFactor, появившиеся в коммитах за последний месяц (#10591) (Спасибо @iSazonov!)
  • Исправлена опечатка в описании экспериментальной функции PSTernaryOperator (#10586) (Спасибо @bergmeister!)
  • Преобразовать ActionPreference.Приостановить значение перечисления в неподдерживаемое, зарезервированное состояние и убрать ограничение на использование ActionPreference.Ignore in preference variables (#10317) (Спасибо @KirkMunro!)
  • Замените ArrayList на List<> T, чтобы получить более читаемый и надёжный код без изменения функционала (#10333) (Спасибо@iSazonov!)
  • Внесите исправления в стиле кода в TestConnectionCommand (#10439) (Спасибо @vexx32!)
  • Очистите AutomationEngine и удалите лишний вызов метода SetSessionStateDrive (#10416) (Спасибо @iSazonov!)
  • Переименуйте ParameterSetName по умолчанию обратно в Delimiter для ConvertTo-Csv и ConvertFrom-Csv (#10425)

Tools

  • Добавить настройки по умолчанию для свойства SDKToUse, чтобы оно строилось в VS (#11085)
  • Install-Powershell.ps1: Добавить параметр для использования установки MSI (#10921) (Спасибо @MJECloud!)
  • Добавьте базовые примеры для install-powershell.ps1 (#10914) (Спасибо @kilasuit!)
  • Заставьте Install-PowerShellRemoting.ps1 обрабатывать пустую строку в параметре PowerShellHome (#10526) (Спасибо @Orca88!)
  • Переключился с /etc/lsb-release на /etc/os-release в install-powershell.sh (#10773) (Спасибо @Himura2la!)
  • Проверьте pwsh.exe и pwsh в ежедневной версии на Windows (#10738) (Спасибо @centreboard!)
  • Удалите ненужный кран в installpsh-osx.sh (#10752)
  • Обновление install-powershell.ps1, чтобы проверить уже установленную ежедневную сборку (#10489)

Тесты

  • Сделать ненадёжный тест DSC в ожидании (#11131)
  • Исправление теста stringdata для корректной валидации ключей хэш-таблиц (#10810)
  • Разгрузка тестовых модулей (#11061) (Спасибо @iSazonov!)
  • Увеличение времени между повторными попытками тестирования URL (#11015)
  • Обновляйте тесты для точного описания действий теста. (#10928) (Спасибо @romero126!)
  • Временный пропуск неустойчивого теста TestAppDomainProcessExitEvenHandlerNotLeaking (#10827)
  • Сделать тест на утечку обработчика событий стабильным (#10790)
  • Синхронизация заглавных букв в CI YAML (#10767) (Спасибо @RDIL!)
  • Добавить тест для исправления утечки обработчика событий (#10768)
  • Добавить Get-ChildItem тест (#10507) (Спасибо @iSazonov!)
  • Заменить неоднозначный язык для тестов с переключателя на параметр для точности (#10666) (Спасибо @romero126!)
  • Добавить экспериментальную проверку в ForEach-Object -Parallel тесты (#10354) (Спасибо @KirkMunro!)
  • Обновление тестов для валидации Alpine (#10428)

Улучшения сборки и пакетов

  • Исправление подписи пакетов Nuget для сборки координированных пакетов (#11316)
  • Обновление зависимостей из PowerShell Gallery и NuGet (#11323)
  • Перевести Microsoft.ApplicationInsights с 2.11.0 до 2.12.0 (#11305)
  • Поднять Microsoft.CodeAnalysis.CSharp с 3.3.1 до 3.4.0 (#11265)
  • Обновления пакетов для Debian 10 и 11 (#11236)
  • Включать только экспериментальные функции до RC (#11162)
  • Обновление минимальной версии macOS (#11163)
  • Поднять схему NJsonSchema с 10.0.27 до 10.0.28 (#11170)
  • Обновление ссылок в README.md и metadata.json для Preview.5 (#10854)
  • Выберите файлы для тестов соответствия, которые принадлежат PowerShell (#10837)
  • Разрешить сборку пакета win7x86 msix. (Внутренний 10515)
  • Разрешить передачу семантических версий в функцию NormalizeVersion (#11087)
  • Увеличить основной фреймворк .NET до 3.1-preview.3 (#11079)
  • Повышение PSReadLine с 2.0.0-beta5 до 2.0.0-beta6 в /src/Modules (#11078)
  • Увеличить Newtonsoft.Json с 12.0.2 до 12.0.3 (#11037) (#11038)
  • Добавьте пакеты Debian 10, 11 и CentOS 8 (#11028)
  • Загрузите Build-Info файл Json с полем ReleaseDate (#10986)
  • Поднять основной фреймворк .NET до 3.1-preview.2 (#10993)
  • Включить сборку пакета x86 MSIX (#10934)
  • Обновите URL скрипта установки dotnet SDK в build.psm1 (#10927)
  • Bump Markdig. Подписано с 0.17.1 по 0.18.0 (#10887)
  • Bump threadJob с 2.0.1 по 2.0.2 (#10886)
  • Обновить манифест и модуль упаковки AppX в соответствии с требованиями MS Store (#10878)
  • Обновить ссылку на пакет PowerShell SDK до preview.5 (внутренний 10295)
  • Обновление ThirdPartyNotices.txt (#10834)
  • Увеличить Microsoft.PowerShell.Native до 7.0.0-preview.3 (#10826)
  • Перевести Microsoft.ApplicationInsights с 2.10.0 до 2.11.0 (#10608)
  • Повышение схемы NJsonSchema с 10.0.24 до 10.0.27 (#10756)
  • Добавить поддержку MacPorts в систему сборки (#10736) (Спасибо @Lucius-Q-User!)
  • Управление пакетами с 1.4.4 до 1.4.5 (#10728)
  • Повышение схемы NJsonSchema с 10.0.23 до 10.0.24 (#10635)
  • Добавить переменную среды для различия клиент/сервер телеметрии в MSI (#10612)
  • Увеличить PSDesiredStateConfiguration с 2.0.3 до 2.0.4 (#10603)
  • Поднять Microsoft.CodeAnalysis.CSharp с 3.2.1 до 3.3.1 (#10607)
  • Обновление до .Net Core 3.0 RTM (#10604) (Спасибо @bergmeister!)
  • Обновить упаковку MSIX, чтобы версию соответствовала требованиям Windows Store (#10588)
  • Увеличить версию PowerShellGet с 2.2 на 2.2.1 (#10382)
  • Bump PackageManagement версии с 1.4.3 по 1.4.4 (#10383)
  • Обновление README.md и metadata.json для 7.0.0-preview.4 (Внутренний 10011)
  • Обновить версию .Net Core 3.0 с Preview 9 до RC1 (#10552) (Спасибо @bergmeister!)
  • Исправить генерацию списка ExperimentalFeature (внутренний 9996)
  • Повысить версию PSReadLine с 2.0.0-beta4 до 2.0.0-beta5 (#10536)
  • Исправьте скрипт сборки релиза, чтобы установить тег release
  • Обновить версию Microsoft.PowerShell.Native до 7.0.0-preview.2 (#10519)
  • Обновление до Netcoreapp3.0 preview9 (#10484) (Спасибо @bergmeister!)
  • Убедитесь, что ежедневная скоординированная сборка знает, что это ежедневная сборка (#10464)
  • Обновите объединённую сборку пакета для выпуска ежедневных сборок (#10449)
  • Удалить ссылку на appveyor (#10445) (Спасибо @RDIL!)
  • Увеличение версии NJsonSchema с 10.0.22 до 10.0.23 (#10421)
  • Удалите удаление папки сборки linux-x64, потому что некоторые зависимости Alpine требуют её (#10407)

Документация и справочные материалы

  • Рефакторинг изменяет журналы в один журнал за релиз (#11165)
  • Исправьте FWLinks для онлайн-справки PowerShell 7 (#11071)
  • Обновление CONTRIBUTING.md (#11096) (Спасибо @mklement0!)
  • Исправьте ссылки на документы установки в README.md (#11083)
  • Добавляет примеры к install-powershell.ps1 скрипту (#11024) (Спасибо @kilasuit!)
  • Исправьте Select-String акцент и Import-DscResource в CHANGELOG.md (#10890)
  • Удалите устаревшую ссылку с powershell-beginners-guide.md (#10926)
  • Слияние стабильной и журналы изменений сервиса (#10527)
  • Обновление использовалось в версии .NET в документации сборки (#10775) (Спасибо @Greg-Smulko!)
  • Заменить ссылки с MSDN на Microsoft Learn в powershell-beginners-guide.md (#10778) (Спасибо @iSazonov!)
  • Исправление сломанной ссылки на обзор DSC (#10702)
  • Обновление Support_Question.md с ссылкой на Stack Overflow как ещё один ресурс сообщества (#10638) (Спасибо @mklement0!)
  • Добавить архитектуру процессора в шаблон запроса распространения (#10661)
  • Добавить новую книгу по PowerShell MoL для изучения документации PowerShell (#10602)
  • Обновление README.md и метаданные для релизов версий 6.1.6 и 6.2.3 (#10523)
  • Исправьте опечатку в README.md (#10465) (Спасибо @vedhasp!)
  • Добавьте ссылку на модуль PSKoans в документацию Learning Resources (#10369) (Спасибо @vexx32!)
  • Обновление README.md и metadata.json для 7.0.0-preview.3 (#10393)