Новые возможности PowerShell 7.0

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

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

  • параллелизация конвейера с помощью ForEach-Object -Parallel;
  • новые операторы:
    • тернарный оператор a ? b : c;
    • операторы сцепления конвейеров || и &&;
    • условные операторы со значением NULL ?? и ??=;
  • упрощенное динамическое представление ошибок и командлет Get-Error для более легкого анализа ошибок;
  • уровень совместимости, позволяющий пользователям импортировать модули в рамках неявного сеанса Windows PowerShell;
  • автоматические уведомления о новых версиях;
  • возможность вызывать ресурсы DSC непосредственно из PowerShell 7 (экспериментальная функция).

Полный список возможностей и исправлений см. в журналах изменений.

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

PowerShell 7 в настоящее время поддерживает следующие 64-разрядные операционные системы.

  • 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 поддерживает выпуски Debian и Ubuntu для ARM32 и ARM64, а также Alpine Linux для ARM64.

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

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

Примечание

Debian 10 и CentOS 8 в настоящее время не поддерживают удаленное взаимодействие WinRM. Подробные сведения о настройке удаленного взаимодействия на основе SSH см. в статье Удаленное взаимодействие с PowerShell через SSH.

Более актуальные сведения о поддерживаемых операционных системах и жизненном цикле поддержки см. в статье Жизненный цикл поддержки 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-preview.

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

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

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

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

Поддержка параллельного выполнения для ForEach-Object

Командлет ForEach-Object, который перебирает элементы в коллекции, теперь имеет встроенную поддержку параллелизма благодаря новому параметру Parallel.

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

В этом примере извлекаются 50 000 записей из пяти системных журналов на локальном компьютере 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.

Тернарный оператор

В 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"

В этом примере, если путь существует, выводится сообщение Path exists (Путь существует). Если путь не существует, отображается значение Путь не найден .

Дополнительные сведения см. в статье об операторе 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

См. дополнительные сведения об операторах сцепления конвейеров.

Операторы объединения со значением NULL, присваивания значения NULL и условные операторы со значением NULL

В PowerShell 7 имеются оператор объединения со значением NULL ??, оператор условного присваивания значения NULL ??= и операторы доступа к членам, определяемого условием NULL: ?. и ?[].

Оператор объединения со значением NULL ??

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

$x = $null
$x ?? 100
100

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

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

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

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

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

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

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

Операторы доступа к членам, определяемого условием NULL: ?. и ?[] (экспериментальная функция)

Примечание

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

Условный оператор со значением NULL разрешает доступ к операнду, являющемуся членом (?.) или элементом (?[]), только если значение операнда отлично от NULL. В противном случае он возвращает значение 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]

См. дополнительные сведения об операторах.

Новое представление ConciseView и командлет 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 возвращается многострочное сообщение об ошибке. Оно содержит команду, в которой возникла ошибка, указатель и описание ошибки с указанием места в строке, где она произошла. Если терминал не поддерживает escape-последовательности цветов ANSI (VT100), цвета не отображаются.

Отображение ошибки скрипта

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

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

Примечание

В $Host.PrivateData добавлено новое свойство ErrorAccentColor, позволяющее изменять контрастный цвет сообщения об ошибке.

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

Выходные данные командлета Get-Error

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

$Error | Get-Error

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

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

См. дополнительные сведения о командлете Get-Error.

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

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

Примечание

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

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

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

  • Default — равносильно не заданной переменной $Env:POWERSHELL_UPDATECHECK.
    • В общедоступных выпусках выводятся уведомления об обновлениях для общедоступных выпусков.
    • В предварительных выпусках и релизах-кандидатах выводятся уведомления об обновлениях для общедоступных и предварительных выпусков.
  • Off — отключает функцию уведомлений об обновлениях.
  • LTS — выводятся уведомления об обновлениях только для общедоступных выпусков ветви Long Term Servicing Branch (LTS).

Примечание

Переменная $Env:POWERSHELL_UPDATECHECK среды не существует, пока не будет задана в первый раз.

Настройка уведомлений о версиях только для выпусков LTS:

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Настройка уведомлений о версиях по умолчанию (Default):

$Env:POWERSHELL_UPDATECHECK = 'Default'

См. дополнительные сведения об уведомлениях об обновлениях.

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

Примечание

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

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

Этот командлет вызывает ресурс DSC напрямую, не создавая документ конфигурации. С его помощью решения для управления конфигурацией могут управлять Windows или Linux посредством ресурсов DSC. Этот командлет также позволяет отлаживать ресурсы, когда модуль 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 в другое пространство выполнения (№ 11273)
  • Устранено ухудшение форматирования из-за добавления примитива FirstOrDefault в выпуске 7.0.0-Preview1 (№ 11258)
  • Отслеживание дополнительных модулей Майкрософт с помощью телеметрии PowerShell 7 (№ 10751)
  • Вывод одобренных функций из статуса экспериментальных (№ 11303)
  • Обновление представления ConciseView для использования TargetObject, если применимо (№ 11075)
  • Исправлено исключение NullReferenceException в открытых методах CompletionCompleters (№ 11274)
  • Исправлена проверка состояния потока контейнера на платформах, отличных от Windows (№ 11301)
  • Обновление параметра PSModulePath для сцепления переменных среды процесса и компьютера (№ 11276)
  • Переход на версию .NET Core 3.1.0 (№ 11260)
  • Исправлено обнаружение переменной $PSHOME до переменной $env:PATH (№ 11141)
  • В pwsh предоставлена возможность наследования переменной $env:PSModulePath для правильного запуска powershell.exe (№ 11057)
  • Переход на предварительную версию 1 .NET Core 3.1 (№ 10798)
  • Рефакторинг проверок тегов повторной обработки в поставщике файловой системы (№ 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!))

Общие обновления и исправления командлетов

  • Исправлена проблема в Raspbian, связанная с установкой даты изменения файла в экспериментальной функции UnixStat (№ 11313)
  • Добавлен параметр -AsPlainText для командлета ConvertFrom-SecureString (№ 11142)
  • Добавлена проверка версии WindowsPS для WinCompat (№ 11148)
  • Исправлены сообщения об ошибках в некоторых сценариях WinCompat (№ 11259)
  • Добавлен собственный двоичный сопоставитель (№ 11032) (выражаем благодарность @iSazonov!))
  • Изменен способ вычисления ширины символов для учета особенностей символов ККЯ (№ 11262)
  • Добавлен командлет Unblock-File для macOS (№ 11137)
  • Исправлена регрессия в Get-PSCallStack (№ 11210) (выражаем благодарность @iSazonov!))
  • Отключена автоматическая загрузка модуля ScheduledJob при использовании командлетов Job (№ 11194)
  • Добавлен аргумент OutputType для командлета Get-Error, и сохраняются исходные имена типов (№ 10856)
  • Исправлена проблема с пустой ссылкой в свойстве SupportsVirtualTerminal (№ 11105)
  • Добавлена проверка соблюдения ограничения в командлете Get-WinEvent (№ 10648) (выражаем благодарность @iSazonov!))
  • Исправление для среды выполнения команд, предотвращающее заполнение параметра -ErrorVariable исключением StopUpstreamCommandsException (№ 10840)
  • Для собственных команд установлена выходная кодировка [Console]::OutputEncoding (№ 10824)
  • Поддержка многострочных блоков кода в примерах (№ 10776) (выражаем благодарность @Greg-Smulko!))
  • Для командлета Select-String добавлен параметр Culture (#10943) (выражаем благодарность @iSazonov!))
  • Исправлена проблема, связанная с путем к рабочему каталогу Start-Job с косой чертой в конце (#11041)
  • ConvertFrom-Json: распаковка коллекций по умолчанию (№ 10861) (выражаем благодарность @danstur!))
  • Использование хэш-таблицы с учетом регистра для командлета Group-Object с параметрами -CaseSensitive и -AsHashtable (№ 11030) (выражаем благодарность @vexx32!))
  • Обработка исключения в случае, если при перестроении пути с целью исправления регистра символов не удается перечислить файлы (№ 11014)
  • Исправление представления ConciseView с целью отображения Activity вместо myCommand (№ 11007)
  • Веб-командлетам разрешено игнорировать состояния ошибки HTTP (№ 10466) (выражаем благодарность @vdamewood!))
  • Исправлена проблема с передачей нескольких объектов CommandInfo в командлет Get-Command (№ 10929)
  • Возвращен командлет Get-Counter для 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 через конвейер в Get-HotFix (№ 10852) (выражаем благодарность @kvprasoon!))
  • Исправлена проблема, связанная с заполнением нажатием клавиши TAB для параметров: теперь общие параметры отображаются как доступные (№ 10850)
  • Исправление GetCorrectCasedPath(): перед вызовом First() сначала выполняется проверка того, возвращаются ли какие-либо записи файловой системы (№ 10930)
  • Установка текущего каталога в качестве рабочего в Start-Job (№ 10920) (выражаем благодарность @iSazonov!))
  • Изменение функции TabExpansion2: теперь она не требует параметра -CursorColumn и обрабатывается как $InputScript.Length (№ 10849)
  • Обработка случая, когда узел может не возвращать строки или столбцы экрана (№ 10938)
  • Исправлена проблема, связанная с использованием контрастных цветов для узлов, которые не поддерживают их (№ 10937)
  • Возвращена команда Update-List (№ 10922)
  • Обновлен идентификатор FWLink для Clear-RecycleBin (№ 10925)
  • При заполнении нажатием клавиши TAB файл пропускается, если невозможно прочитать его атрибуты (№ 10910)
  • Возвращен командлет Clear-RecycleBin для Windows (№ 10909)
  • Добавлена переменная $env:__SuppressAnsiEscapeSequences, которая определяет, должна ли использоваться escape-последовательность VT в выходных данных (№ 10814)
  • Добавлен параметр -NoEmphasize для раскрашивания выходных данных командлета Select-String (№ 8963) (выражаем благодарность @derek-xia!))
  • Возвращен командлет Get-HotFix (№ 10740)
  • Командлет Add-Type теперь можно использовать в приложениях, в которых размещается PowerShell (№ 10587)
  • Более эффективный порядок вычисления в LanguagePrimitives.IsNullLike() (№ 10781) (выражаем благодарность @vexx32!))
  • Улучшена обработка передаваемых по конвейеру входных данных в виде смешанных коллекций и передаваемых по конвейеру потоков входных данных в Format-Hex (№ 8674) (выражаем благодарность @vexx32!))
  • Использование преобразования типов в хэш-таблицах SSHConnection, когда значение имеет непредвиденный тип (№ 10720) (выражаем благодарность @SeeminglyScience!))
  • Исправлено поведение команды Get-Content -ReadCount 0 при задании параметра -TotalCount (№ 10749) (выражаем благодарность @eugenesmlv!))
  • Изменен текст сообщения об ошибке отказа в доступе в Get-WinEvent (№ 10639) (выражаем благодарность @iSazonov!))
  • Включение завершения табуляции для назначения переменных с ограничением перечисления или ограниченного типа (No 10646).
  • Удалено неиспользуемое свойство удаленного взаимодействия SourceLength, из-за которого возникали проблемы с форматированием (№ 10765)
  • Для командлета ConvertFrom-StringData добавлен параметр -Delimiter (№ 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)
  • Для командлета New-Service добавлен параметр -SecurityDescriptorSDDL (№ 10483) (выражаем благодарность @kvprasoon!))
  • Устранены информационные выходные данные, консолидировано использование проверки связи в Test-Connection (№ 10478) (выражаем благодарность @vexx32!))
  • Чтение специальных точек повторного синтаксического анализа без обращения к ним (№ 10662) (выражаем благодарность @iSazonov!))
  • Вывод выходных данных Clear-Host непосредственно в терминал (№ 10681) (выражаем благодарность @iSazonov!))
  • Возвращен символ новой строки при группировке с помощью Format-Table и -Property (№ 10653)
  • Из параметра -InputObject командлета Get-Random удален аргумент [ValidateNotNullOrEmpty], благодаря чему допустима пустая строка (№ 10644)
  • Алгоритм определения расстояния между строк при формировании предложений теперь не учитывает регистр символов (№ 10549) (выражаем благодарность @iSazonov!))
  • Исправлено исключение пустой ссылки при обработке входных данных ForEach-Object -Parallel (№ 10577)
  • Добавлены определения групповой политики PowerShell (№ 10468).
  • Узел консоли обновлен для поддержки управляющих последовательностей VT XTPUSHSGR и XTPOPSGR, используемых в сценариях компоновки (№ 10208)
  • Для командлета Start-Job добавлен параметр WorkingDirectory (№ 10324) (выражаем благодарность @davinci26!))
  • Удален обработчик событий, который приводил к ошибочной репликации изменений точек останова в отладчик пространства выполнения узла (№ 10503) (выражаем благодарность @KirkMunro!))
  • Замена api-ms-win-core-job-12-1-0.dll на Kernell32.dll в интерфейсе API P/Invoke Microsoft.PowerShell.Commands.NativeMethods (№ 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!))

Производительность

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

Очистка кода

  • Изменение текста комментария и элемента в соответствии со стандартами Майкрософт (№ 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 не создаются лишние строки (№ 10985)
  • Отключена проверка уведомлений об обновлениях для ежедневных сборок (№ 10903) (выражаем благодарность @bergmeister!))
  • Восстановлен интерфейс API отладки, который перестал работать из-за исправления № 10338 (№ 10808)
  • Удаление ссылки WorkflowJobSourceAdapter, которая больше не используется (No 10326) (выражаем благодарность) @KirkMunro!)
  • Очистка кода списка переходов для интерфейсов COM путем внесения исправлений в атрибуты PreserveSig (№ 9899) (выражаем благодарность @weltkante!))
  • Добавьте комментарий, описывающий, почему -ia не является псевдонимом для общего параметра -InformationAction (No 10703) (выражаем благодарность). @KirkMunro!)
  • Файл InvokeCommandCmdlet.cs переименован в InvokeExpressionCommand.cs (№ 10659) (выражаем благодарность @kilasuit!))
  • Незначительная очистка кода, связанного с уведомлениями об обновлениях (№ 10698)
  • Удалена нерекомендуемая логика рабочего процесса из скриптов настройки удаленного взаимодействия (№ 10320) (выражаем благодарность @KirkMunro!))
  • Обновление формата справки с целью использования правильного регистра символов (№ 10678) (выражаем благодарность @tnieto88!))
  • Исправление проблем со стилем CodeFactor в фиксациях за последний месяц (№ 10591) (выражаем благодарность @iSazonov!))
  • Исправлена опечатка в описании экспериментальной возможности PSTernaryOperator (№ 10586) (выражаем благодарность @bergmeister!))
  • Значение перечисления ActionPreference.Suspend переведено в неподдерживаемое зарезервированное состояние; устранено ограничение на использование ActionPreference.Ignore в привилегированных переменных (№ 10317) (выражаем благодарность @KirkMunro!))
  • Класс ArrayList заменен на List<T> для повышения удобочитаемости и надежности кода без изменения функциональности (№ 10333) (выражаем благодарность @iSazonov!))
  • Исправления стиля кода в TestConnectionCommand (№ 10439) (выражаем благодарность @vexx32!))
  • Очистка AutomationEngine и удаление лишнего вызова метода SetSessionStateDrive (№ 10416) (выражаем благодарность @iSazonov!))
  • Переименование атрибута ParameterSetName обратно в Delimiter для командлетов ConvertTo-Csv и ConvertFrom-Csv (№ 10425)

Инструменты

  • Добавлено значение по умолчанию для свойства SDKToUse для обеспечения сборки в Visual Studio (№ 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)
  • Исправление теста строковых данных для правильной проверки ключей хэш-таблиц (№ 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 и 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)
  • Реализована возможность сборки пакета MSIX win7x86 (внутреннее исправление № 10515)
  • Разрешена передача семантических версий в функцию NormalizeVersion (№ 11087)
  • Обновление платформы .NET Core до версии 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)
  • Отправка JSON-файла Build-Info с полем ReleaseDate (№ 10986)
  • Обновление платформы .NET Core до версии 3.1-preview.2 (№ 10993)
  • Реализована возможность сборки пакета MSIX x86 (№ 10934)
  • Обновлен URL-адрес скрипта установки пакета SDK dotnet в файле build.psm1 (№ 10927)
  • Обновление Markdig.Signed с версии 0.17.1 до версии 0.18.0 (№ 10887)
  • Обновление ThreadJob с версии 2.0.1 до версии 2.0.2 (№ 10886)
  • Обновление манифеста AppX и модуля упаковки в соответствии с требованиями Microsoft Store (№ 10878)
  • Обновление ссылки на пакет для SDK PowerShell до версии 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!))
  • Обновление PackageManagement с версии 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 (№ 10588)
  • Обновление PowerShellGet с версии 2.2 до версии 2.2.1 (№ 10382)
  • Обновление PackageManagement с версии 1.4.3 до версии 1.4.4 (№ 10383)
  • Обновление файлов README.md и metadata.json для версии 7.0.0-preview.4 (внутреннее исправление № 10011)
  • Обновление версии .Net Core 3.0 с предварительной версии 9 до RC1 (№ 10552) (выражаем благодарность @bergmeister!))
  • Исправлена проблема, связанная с формированием списка экспериментальных возможностей (внутреннее исправление № 9996)
  • Обновление PSReadLine с версии 2.0.0-beta4 до версии 2.0.0-beta5 (№ 10536)
  • Исправление скрипта сборки выпуска с целью задания тега выпуска
  • Обновление Microsoft.PowerShell.Native до версии 7.0.0-preview.2 (№ 10519)
  • Обновление до версии Netcoreapp3.0 preview9 (№ 10484) (выражаем благодарность @bergmeister!))
  • Убедитесь, что ежедневная скоординированная сборка знает, что это ежедневная сборка (No 10464).
  • Обновление объединенной сборки пакета для выпуска ежедневных сборок (№ 10449)
  • Удалена ссылка на appveyor (№ 10445) (выражаем благодарность @RDIL!))
  • Обновление NJsonSchema с версии 10.0.22 до версии 10.0.23 (№ 10421)
  • Отменено удаление папки сборки linux-x64, так как она требуется для некоторых зависимостей для Alpine (№ 10407)

Документация и содержимое справки

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