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


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

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

Полный список изменений см. в CHANGELOG в репозитории GitHub.

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

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

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

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

  • Исправление распаковки в веб-командлетах, чтобы включить Brotli (#17955) (благодарим @iSazonov!))
  • Компонент Webcmdlets добавляет код 308 в список кодов перенаправления и проводит небольшую очистку (#18536)
  • Выполните отрисовку индикатора хода выполнения в Invoke-WebRequest при завершении загрузки или отмене (#18130)
  • Веб-командлеты получают интервал Retry-After от заголовков ответа, если код состояния равен 429 (#18717)
  • Веб-командлеты задают кодировку по умолчанию в UTF8 (#18219)
  • Сохраните WebSession.MaximumRedirection во избежание изменений (#19190)
  • WebCmdlets анализируют XML-декларацию, чтобы определить значение кодировки, если оно присутствует. (#18748)
  • Исправление использования xml--Body в webcmdlets без кодирования (#19281)
  • Изменение поведения метода PUT на метод POST для типа контента по умолчанию в WebCmdlets (#19152)
  • Учитывайте свойство ContentType из заголовков в WebCmdlets (#19227)
  • Разрешить сохранение оригинального метода HTTP путем добавления -PreserveHttpMethodOnRedirect в веб-командлеты (#18894)
  • Webcmdlets отображают ошибку при перенаправлении с https на http (#18595)
  • Добавить AllowInsecureRedirect переключатель в веб-командлеты (#18546)
  • Улучшите подробное сообщение в веб-командлетах, когда длина содержимого неизвестна (#19252)
  • Относительный URI для ссылок создается на основе ответа в Invoke-WebRequest (#19092).
  • Исправление перенаправления для -CustomMethod POST в WebCmdlets (#19111)
  • Удаление предыдущего ответа в Webcmdlets (#19117)
  • Улучшить формат ошибок xml и json Invoke-WebRequest (#18837)
  • Добавьте ValidateNotNullOrEmpty к параметрам OutFile и InFile WebCmdlets (#19044)
  • Обновление списка заголовков HttpKnownHeaderNames (#18947)
  • Invoke-RestMethod -FollowRelLink исправить ссылки, содержащие запятые (#18829)
  • Исправлена ошибка с управлением процесса перенаправления и хранением авторизации в веб-командлетах (#18902)
  • Добавить StatusCode в HttpResponseException (#18842)
  • Поддержка постоянных подключений HTTP в веб-командлетах (#19249) (Спасибо @stevenebutler!))
  • Небольшая очистка Invoke-RestMethod (#19490)
  • Улучшите подробное сообщение WebCmdlets для отображения правильной версии HTTP (#19616)
  • Добавьте FileNameStar в MultipartFileContent в WebCmdlets (#19467)
  • Обновление HTTP статуса с 409 на 429 для WebCmdlets, чтобы получить интервал повторной попытки из заголовка Retry-After. (#19622) (Спасибо @mkht!)
  • Измените -TimeoutSec на -ConnectionTimeoutSeconds и добавьте -OperationTimeoutSeconds в веб-командлеты (#19558). Благодарим @stevenebutler!). Другие командлеты.
  • Поддержка 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 для командлетов и (#19108) (благодарим
  • Добавление подтверждения и параметров WhatIf в Stop-Transcript(#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 для удаленного использования (#18222) (благодарим @dkaszews!)
  • Ускорить разрешение относительных путей Resolve-Path (#19171) (Спасибо @MartinGC94!))
  • Добавлен параметр переключателя -CaseInsensitive к командлетам Select-Object и Get-Unique (#19683) (благодарим @ArmaanMcleod!))
  • Restart-Computer и Stop-Computer должны завершаться ошибкой, если не выполняются с помощью sudo в Unix (#19824)

Улучшения двигателя

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

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

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

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

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

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

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

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

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

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

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