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

PowerShell 7.4 включает следующие функции, обновления и критические изменения. PowerShell 7.4 основана на .NET 8.0.0.

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

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

  • Образы Docker сервера Nano Server недоступны для этого выпуска
  • Добавлен параметр ProgressAction в общие параметры
  • Обновите некоторые API PowerShell, чтобы вызвать АргументException вместо ArgumentNullException, если аргумент является пустой строкой (#19215) (спасибо)@xtqqczze!)
  • Удаление кода, связанного с #requires -pssnapin (#19320)
  • Test-Json теперь использует JsonSchema.NET вместо Newtonsoft.Json.Schema.
    • При этом изменении Test-Json больше не поддерживается более старые схемы Черновика 4. (#18141) (спасибо @gregsdennis!). Дополнительные сведения о схемах JSON см . в документации по схеме JSON. Это также разбивает Test-Json файлы JSON и JSONC с комментариями.
    • ConvertFrom-Json Поддержка по-прежнему использует Newtonsoft.Json.Schema, чтобы он смог преобразовать JSON-файлы с комментариями.
  • Test-Connection Выходные данные теперь содержат более подробные сведения о тестах tcp-подключения
  • .NET представила изменения, которые повлияли Test-Connection. Командлет теперь возвращает ошибку о необходимости использования sudo на платформах Linux при использовании пользовательского размера буфера (#20369)
  • Экспериментальная функция PSNativeCommandPreserveBytePipe теперь является основной. PowerShell теперь сохраняет данные байтового потока при перенаправлении потока stdout собственной команды в файл или при передаче данных байт-потока в поток stdin собственной команды.
  • Изменение способа обработки относительных Resolve-Path путей при использовании параметра RelativeBasePath (#19755) (спасибо)@MartinGC94!)
  • Удаление неиспользуемого кода PSv2 — удаляет функцию TabExpansion (#18337)

Обновления установщика

Пакет MSI Windows теперь предоставляет возможность отключить телеметрию PowerShell во время установки. Дополнительные сведения см. в разделе "Установка пакета msi" из командной строки.

Обновленные версии PSResourceGet и PSReadLine

PowerShell 7.4 включает Microsoft.PowerShell.PSResourceGet версии 1.0.1. Этот модуль устанавливается параллельно с PowerShellGet версии 2.2.5 и PackageManagement версии 1.4.8.1. Дополнительные сведения см. в документации по Microsoft.PowerShell.PSResourceGet.

PowerShell 7.4 теперь включает PSReadLine версии 2.3.4. Дополнительные сведения см. в документации по PSReadLine.

Улучшения для заполнения нажатием клавиши TAB

Многие благодаря @MartinGC94 и другим людям за всю свою работу по улучшению завершения вкладок.

  • Исправлена проблема при выполнении первой команды в скрипте с пустым выражением массива (#18355)
  • Исправление завершения позиционного аргумента (No 17796)
  • Приоритет набора параметров по умолчанию при выполнении позиционных аргументов (#18755)
  • Улучшение псевдо привязки для динамических параметров (#18030)
  • Улучшение вывода типов хэш-ключей (#17907)
  • Исправлена ошибка вывода типов для пустых операторов возврата (#18351)
  • Улучшение вывода типов для Get-Random (#18972)
  • Исправление вывода типов для всех переменных области (#18758)
  • Улучшение перечисления выводимых типов в конвейере (No 17799)
  • Добавление завершения для значений в сравнениях при сравнении перечислений (#17654)
  • Добавление завершения назначения свойств для перечислений (No 19178)
  • Исправление завершения для свойств переменной PSCustomObject (#18682)
  • Исправление завершения члена в аргументе атрибута (#17902)
  • Исключить избыточные псевдонимы параметров из результатов завершения (No 19382)
  • Исправление завершения члена класса для классов с базовыми типами (#19179)
  • Добавление завершения для ключевых слов Using (#16514)
  • Исправлена утечка переменной TabExpansion2 при завершении переменных (#18763)
  • Включение завершения переменных в областях ScriptBlock (#19819)
  • Исправлено завершение переменной инструкции foreach (No 19814)
  • Исправление приоритета типа переменной (#18691)
  • Исправление завершения члена для класса Enum PowerShell (#19740)
  • Исправлена синтаксический анализ литералов массива в выражениях индекса в вызовах методов (#19224)
  • Улучшение завершения пути (No 19489)
  • Исправлена ошибка индексирования из связанной ошибки в CompleteInput для пустых входных данных скрипта (#19501)
  • Повышение производительности завершения переменной (#19595)
  • Улучшение завершения хэш-таблицы для назначений ограниченных переменных типа, вложенных хэш-таблиц и многое другое (#17660)
  • Вывод выходных данных внешнего приложения в виде строк (#19193)
  • Обновление завершения параметра для перечисления, чтобы исключить значения, не разрешенные атрибутами ValidateRange (#17750) (спасибо@fflaten!).
  • Исправление динамического завершения параметров (#19510)
  • Добавление завершения для переменных, назначенных инструкцией Data (#19831)
  • Исправление расширения тильды (~) в системах Windows, чтобы $home предотвратить критические варианты использования с помощью собственных команд (No 21529)

Усовершенствования веб-командлетов

Многие благодаря @CarloToso и другим за всю работу по улучшению веб-командлетов.

  • Исправление декомпрессии в веб-командлетах, чтобы включить Brotli (No 17955) (спасибо)@iSazonov!)
  • Webcmdlets добавляет 308 для кодов перенаправления и небольшой очистки (#18536)
  • Завершите отрисовку индикатора хода выполнения в Invoke-WebRequest при завершении или отмене загрузки (#18130)
  • Веб-командлеты получают интервал Retry-After из заголовков ответа, если код состояния равен 429 (#18717)
  • Веб-командлеты задают кодировку по умолчанию для кодировки charset в UTF8 (#18219)
  • Сохранение WebSession.MaximumRedirection из изменений (#19190)
  • WebCmdlets анализирует объявление XML, чтобы получить значение кодирования, если оно присутствует. (#18748)
  • Исправление с помощью xml -Body в webcmdlets без кодирования (#19281)
  • Настройка поведения метода PUT в POST для типа контента по умолчанию в WebCmdlets (#19152)
  • Учитывайте ContentType из заголовков в WebCmdlets (No 19227)
  • Разрешить сохранить исходный метод HTTP, добавив -PreserveHttpMethodOnRedirect в веб-командлеты (#18894)
  • Webcmdlets отображает ошибку https на http-перенаправление (#18595)
  • Добавление параметра AllowInsecureRedirect в веб-командлеты (#18546)
  • Улучшение подробного сообщения в веб-командлетах при неизвестности длины содержимого (#19252)
  • Создайте относительный URI для ссылок из ответа Invoke-WebRequest (No 19092)
  • Исправление перенаправления для -CustomMethod POST webCmdlets (#19111)
  • Удаление предыдущего ответа в Webcmdlets (#19117)
  • Улучшение Invoke-WebRequest формата ошибок XML и JSON (#18837)
  • Добавление validateNotNullOrEmpty в outFile и InFile параметров WebCmdlets (#19044)
  • Список заголовков обновлений HttpKnownHeaderNames (#18947)
  • Invoke-RestMethod -FollowRelLink исправления ссылок, содержащих запятые (#18829)
  • Исправлена ошибка с управлением перенаправлением и сохранением подлинности в веб-командлетах (No 18902)
  • Добавление StatusCode в HttpResponseException (#18842)
  • Поддержка постоянных подключений HTTP в веб-командлетах (No 19249) (спасибо)@stevenebutler!)
  • Небольшая очистка Invoke-RestMethod (#19490)
  • Улучшение подробного сообщения WebCmdlets для отображения правильной версии HTTP (#19616)
  • Добавление FileNameStar в MultipartFileContent в WebCmdlets (#19467)
  • Исправление состояния HTTP от 409 до 429 для WebCmdlets, чтобы получить интервал повтора из заголовка Retry-After. (#19622) (спасибо)@mkht!)
  • Изменение -TimeoutSec и добавление -OperationTimeoutSeconds в веб-командлеты (No 19558) (спасибо @stevenebutler!) другим командлетам-ConnectionTimeoutSeconds)
  • Поддержка CTRL+c при зависаниях подключений при чтении данных в WebCmdlets (#19330) (спасибо)@stevenebutler!)
  • Поддержка сокета домена Unix в WebCmdlets (#19343)

Другие улучшения командлетов

  • Test-Connection теперь возвращает ошибку о необходимости использования sudo на платформах Linux при использовании пользовательского размера буфера (#20369)
  • Добавление типов выходных данных в команды Format (#18746) (спасибо)@MartinGC94!)
  • Добавление атрибутов типа вывода для Get-WinEvent (#17948) (спасибо)@MartinGC94!)
  • Добавление параметров Path и LiteralPath в Test-Json командлет (#19042) (спасибо)@ArmaanMcleod!)
  • Добавление параметра NoHeader и ConvertTo-Csv Export-Csv командлетов (#19108) (спасибо)@ArmaanMcleod!)
  • Добавление параметров Stop-TranscriptConfirm и WhatIf в (No 18731) (спасибо)@JohnLBevan!)
  • Добавление параметра FuzzyMinimumDistance в Get-Command (#18261)
  • Создание параметра кодирования с возможностью ANSI кодирования в PowerShell (#19298) (спасибо)@CarloToso!)
  • Добавление хода выполнения Copy-Item (#18735)
  • Update-Help Теперь сообщает об ошибке при использовании неявного языка и региональных параметров в системах, отличных от США. (#17780) (спасибо@dkaszews!)
  • Не требуется действие при создании завершенной записи хода выполнения (#18474) (спасибо)@MartinGC94!)
  • Запретить отрицательные значения для Get-Content параметров -Head командлета и -Tail (#19715) (спасибо)@CarloToso!)
  • Создайте Update-Help правильную ошибку, если текущий язык и региональные параметры не связаны с языком (#19765) (спасибо)@josea!)
  • Разрешить объединение -Skip параметров и -SkipLast параметров в Select-Object командлете. (#18849) (спасибо@ArmaanMcleod!)
  • Добавление Get-SecureRandom командлета (#19587)
  • Set-Clipboard -AsOSC52для удаленного использования (No 18222) (спасибо)@dkaszews!)
  • Resolve-Path Ускорение относительного разрешения пути (#19171) (спасибо)@MartinGC94!)
  • Добавлен параметр -CaseInsensitive switch в Select-Object и Get-Unique командлеты (No 19683) (спасибо)@ArmaanMcleod!)
  • Restart-Computer и Stop-Computer должен завершиться ошибкой, если не выполняется с помощью sudo в Unix (#19824)

Улучшения подсистемы

Обновления для $PSStyle

  • Добавляет свойства Dim и DimOff (#18653)
  • Добавлены статические методы в класс PSStyle, который сопоставляет значения переднего плана и фона ConsoleColor со escape-последовательностями ANSI (#17938)
  • Заголовки таблиц для вычисляемых полей форматируются курсивом по умолчанию
  • Добавлена поддержка уважения $PSStyle.OutputRendering к удаленному узлу (No 19601)
  • Обновлены данные телеметрии для включения использования CrescendoBuilt модулей (No 20371)

Другие обновления ядра

  • Сделайте класс PowerShell не филиалом с Runspace при объявлении атрибута NoRunspaceAffinity (#18138)
  • Добавление атрибута ValidateNotNullOrWhiteSpace (#17191) (спасибо)@wmentha!)
  • Добавление sqlcmd в список для передачи устаревших аргументов (#18559)
  • Добавление функции cd~ (No 18308) (спасибо)@GigaScratch!)
  • Исправление синтаксического анализа типов массива в универсальных типах (#19205) (спасибо)@MartinGC94!)
  • Исправление глоббинга подстановочных знаков в корне путей устройства (No 19442) (спасибо)@MartinGC94!)
  • Добавление общедоступного API для получения расположений элементов PSModulePath (#19422)
  • Исправление неправильной строки преобразования типов (#19560) (спасибо)@MartinGC94!)
  • Исправление медленного выполнения при использовании многих точек останова (#14953) (спасибо)@nohwnd!)
  • Удаление кода, связанного с #requires -pssnapin (#19320)

Экспериментальные функции

PowerShell 7.4 содержит следующие экспериментальные функции:

  • PSFeedbackProvider — заменяет жестко закодированную платформу предложений расширяемым поставщиком отзывов.
    • Эта функция также добавляет свойства $PSStyle.Formatting FeedbackName, FeedbackText и FeedbackAction, чтобы изменить форматирование сообщений обратной связи.
  • PSModuleAutoLoadSkipOfflineFiles — обнаружение модулей теперь пропускает файлы, помеченные поставщиками облачных служб как не полностью на диске.
  • PSCommandWithArgs — добавление поддержки передачи аргументов командам в виде одной строки

Следующие экспериментальные функции стали основными:

PowerShell 7.4 изменила следующие экспериментальные функции:

  • PSCommandNotFoundSuggestion . Эта функция теперь использует расширяемый поставщик отзывов, а не жестко закодированные предложения (No 18726)

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