Новые возможности 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)