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


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

PowerShell 7.3 — следующий стабильный выпуск, созданный на платформе .NET 7.0.

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

Серьезные изменения и улучшения

  • В этом выпуске API Windows были обновлены или удалены для соответствия требованиям, что означает, что PowerShell 7.3 не работает в Windows 7. Хотя Windows 7 больше не поддерживается, предыдущие сборки могут работать в Windows 7.
  • PowerShell Direct для Hyper-V поддерживается только в Windows 10 версии 1809 и выше.
  • Test-Connection не работает из-за намеренного критического изменения в .NET 7. Эта проблема отслеживается под номером #17018.
  • Добавьте clean блок в блок скрипта в качестве однорангового узла beginprocessи end разрешить простую очистку ресурсов (No 15177)
  • Изменить значение по умолчанию для $PSStyle.OutputRendering на хост
  • Сделать так, чтобы Out-String и Out-File сохраняли строковые входные данные без изменений (#17455)
  • Переместите определение данных типа System.Security.AccessControl.ObjectSecurity в модуль Microsoft.PowerShell.Security (#16355) (спасибо)@iSazonov!)
    • Перед применением этого изменения не требуется явно импортировать модуль Microsoft.PowerShell.Security, чтобы использовать свойства кода, определенные для экземпляра System.Security.AccessControl.ObjectSecurity.
    • После применения этого изменения необходимо явно импортировать модуль Microsoft.PowerShell.Security, чтобы использовать свойства и методы кода.

Улучшения автозаполнения с помощью клавиши TAB

  • PowerShell 7.3 включает PSReadLine 2.2.6, что позволяет прогнозировать IntelliSense по умолчанию. Дополнительные сведения см. в about_PSReadLine.
  • Исправлено завершение нажатием клавиши TAB в блоке скрипта для ValidateScriptAttribute (#14550) (спасибо)@MartinGC94!)
  • Добавлено завершение вкладки для меток цикла после break/continue (#16438) (спасибо)@MartinGC94!)
  • Улучшение завершения хэш-таблицы в нескольких сценариях (#16498) (Спасибо)@MartinGC94!)
    • Сплаттинг параметров
    • Параметр Arguments для Invoke-CimMethod
    • Параметр FilterHashtable для Get-WinEvent
    • Параметр Property для командлетов CIM
    • Удаление дублей из сценариев завершения для участников
  • Поддержка косой черты в сетевом пути (UNC path) (#17111) (Спасибо@sba923!))
  • Улучшение автозаполнения элементов (#16504) (Спасибо @MartinGC94!)
  • Приоритет завершения ValidateSet по сравнению с перечислениями для параметров (#15257) (Спасибо)@MartinGC94!)
  • Добавление поддержки вывода типов для универсальных методов с параметрами типа (#16951) (спасибо)@MartinGC94!)
  • Улучшение вывода типов и завершения (No 16963) (спасибо)@MartinGC94!)
    • Позволяет отображать методы в результатах завершения для ForEach-Object -MemberName.
    • Предотвращает завершение выражений, возвращающих void, например ([void]("")).
    • Разрешает отображение конструкторов классов, отличных от используемых по умолчанию, если завершение класса основано на AST.
  • Улучшение вывода типов для $_ (No 17716) (спасибо)@MartinGC94!)
  • Исправление вывода типов для ICollection (#17752) (спасибо)@MartinGC94!)
  • Запретить удаление фигурных скобок при завершении переменных (#17751) (Спасибо)@MartinGC94!)
  • Добавление завершения для выражений индекса для словарей (#17619) (спасибо)@MartinGC94!)
  • Исправить завершение типа для маркеров атрибутов (#17484) (спасибо)@MartinGC94!)
  • Улучшение завершения динамической вкладки параметров (#17661) (спасибо)@MartinGC94!)
  • Избегайте привязки позиционных параметров при завершении параметра перед значением (#17693) (Спасибо @MartinGC94!))

Улучшена обработка ошибок.

  • Правильно задать $? для выражения команды с перенаправлениями (#16046)
  • Исправлена ошибка приведения при использовании $PSNativeCommandUseErrorActionPreference (#15993)
  • Сделайте так, чтобы обработка ошибок в собственной команде при необходимости учитывала ErrorActionPreference (#15897)
  • Укажите путь к исполняемому файлу как TargetObject для ошибки с кодом выхода, отличным от нуля #16108 (спасибо @rkeithhill!))

Улучшения сеансов и технологии удаленного взаимодействия

  • Добавьте -Options к командам PSRP через SSH, чтобы разрешить передачу параметров OpenSSH напрямую (#12802) Спасибо @BrannenGH!)
  • Добавьте параметр -ConfigurationFile в pwsh, чтобы разрешить запуск нового процесса с конфигурацией сеанса, определенной в файле .pssc (#17447).
  • Добавление поддержки использования New-PSSessionConfigurationFile на платформах, отличных от Windows (#17447)

Обновлены командлеты

  • Добавить -HttpVersion параметр в веб-командлеты (#15853) (спасибо)@hayhay27!)
  • Добавление поддержки веб-командлетов для открытых входных тегов (#16193) (спасибо)@farmerau!)
  • ИсправлениеConvertTo-Json -Depth, позволяющее максимально разрешить 100 (No 16197) (спасибо)@KevRitchie!)
  • Улучшение обработки переменных при вызове Invoke-Command$Using: с помощью выражения (#16113) (спасибо)@dwtaber!)
  • Добавьте -StrictMode к Invoke-Command, чтобы разрешить указание строгого режима при локальном вызове команды (#16545) (Спасибо @Thomas-Yu!))
  • Добавьте блок clean в блок скрипта как равноправный узел к begin, process и end, чтобы обеспечить простую очистку ресурсов (#15177)
  • Добавьте -Amended переключатель к Get-CimClass командлету (#17477) (Спасибо@iSazonov)
  • Изменено ConvertFrom-Json -AsHashtable на использование упорядоченной хэш-таблицы (#17405)
  • Удалены ANSI escape-последовательности в строках перед отправкой в Out-GridView (#17664)
  • Добавлен параметр Milliseconds в New-TimeSpan (#17621) (спасибо @NoMoreFood!))
  • Отображение необязательных параметров при отображении определений методов и перегрузки (No 13799) (спасибо)@eugenesmlv!)
  • Разрешить выполнение команд, даже если текущий рабочий каталог больше не существует (#17579)
  • Добавление поддержки HTTPS с Set-AuthenticodeSignature -TimeStampServer помощью #16134 (спасибо) @Ryan-Hutchison-USAF!)
  • Отображение десятичных чисел в таблице с использованием текущей культуры (#17650)
  • Добавление акселератора типов, упорядоченного для OrderedDictionary (No 17804) (благодарим@fflaten!)
  • Добавьте find.exe к устаревшему поведению привязки аргументов для Windows (#17715)
  • Добавьте -NoProfileLoadTime переключатель в pwsh (#17535) (спасибо @rkeithhill!))

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

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

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

  • PSAnsiRenderingFileInfo — Эта функция добавляет $PSStyle.FileInfo элемент и включает цвет определенных типов файлов.

  • PSCleanBlock — добавляет clean блок в блок скрипта на одном уровне с begin, process и end, чтобы позволить легкую очистку ресурсов.

  • PSAMSIMethodInvocationLogging — расширяет данные, отправленные в AMSI для проверки, чтобы включить все вызовы элементов метода .NET.

  • PSNativeCommandArgumentPassing — PowerShell теперь использует свойство ArgumentList объекта StartProcessInfo, а не старый механизм восстановления строки при вызове собственного исполняемого файла.

    PowerShell 7.3.1 добавляет sqlcmd.exe в список собственных команд Windows, использующих стиль передачи аргументов Legacy.

  • PSExec — добавляет новый Switch-Process командлет (псевдоним exec) для обеспечения exec совместимости для систем, отличных от Windows.

    PowerShell 7.3.1 изменил псевдоним exec, превратив его в функцию, которая оборачивает Switch-Process. Функция позволяет передавать параметры в системную команду, которые могут быть ошибочно привязаны к параметру WithCommand.

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

  • PSNativeCommandErrorActionPreference — добавляет переменную $PSNativeCommandUseErrorActionPreference, чтобы ошибки, вызванные собственными командами, считались ошибками PowerShell.

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

  • PSNativePSPathResolution Экспериментальная функция больше не поддерживается.
  • PSStrictModeAssignment Экспериментальная функция больше не поддерживается.

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