Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
PowerShell 7.5.4 включает следующие функции, обновления и критические изменения. PowerShell 7.5.4 основан на выпуске .NET 9.0.306.
Полный список изменений см. в CHANGELOG в репозитории GitHub. Дополнительные сведения о .NET 9 см. в статье "Новые возможности.NET 9".
Критические изменения
- Исправьте параметры
-OlderThanи-NewerThanдляTest-Pathпри использованииPathTypeи диапазона дат (#20942) (Спасибо @ArmaanMcleod!))- Ранее было
-OlderThanбы проигнорировано, если указано вместе
- Ранее было
- Измените
New-FileCatalog -CatalogVersionзначение по умолчанию на 2 (#20428) (спасибо) @ThomasNieto!) - Блокировать получение справки из сетевых расположений в ограниченных сеансах удаленного управления (#20593)
- Установщик Windows теперь запоминает используемые параметры установки и использует их для инициализации параметров следующей установки (#20420) (спасибо) @reduckted!)
-
ConvertTo-Jsonтеперь сериализуетсяBigIntegerкак число (#21000) (спасибо) @jborean93!)
Обновленные модули
PowerShell 7.5.4 включает следующие обновленные модули:
- Microsoft.PowerShell.PSResourceGet версии 1.1.1
- PSReadLine версии 2.3.6
Улучшения для заполнения нажатием клавиши TAB
Большое спасибо @ArmaanMcleod и другим за всю их работу по улучшению автодополнения.
- Возврат к выводу типа, когда хэш-значение ключа невозможно извлечь из безопасного выражения (#21184) (спасибо) @MartinGC94!)
- Исправлена регрессия при определении типа для
$_(#21223) (Спасибо) @MartinGC94!) - Расширение
~до$HOMEв Windows с автодополнением (#21529) - Не завершайте ввод имени параметра и члена класса (#21182) (спасибо) @MartinGC94!)
- Предотвращение резервного завершения файла при завершении вкладки имен типов (#20084) (спасибо) @MartinGC94)
- Добавление дополнителя аргумента к
-VersionдляSet-StrictMode(#20554) (спасибо @ArmaanMcleod!)) - Добавление
-Verbдополнения аргументов дляGet-Verb/Get-Commandи рефакторингGet-Verb(#20286) (Спасибо @ArmaanMcleod)) - Добавление
-Verbполного аргумента дляStart-Process(#20415) (спасибо) @ArmaanMcleod) - Добавьте дополнители аргументов для команд
-Scope,*-Variableи*-Alias(*-PSDrive) (спасибо ) - Добавить
-Moduleзавершение дляSave-Help/Update-Helpкоманд (#20678) (Спасибо @ArmaanMcleod)
Новые командлеты
- Добавить
ConvertTo-CliXmlиConvertFrom-CliXmlкомандлет (#21063) (Спасибо @ArmaanMcleod!))
Улучшения веб-командлетов
- Исправление, чтобы
-PassThruи-Outfileмогли работать вместе (№24086) - Добавление
OutFileсвойства вWebResponseObject(#24047) - Отображение имени файла в
Invoke-WebRequest -OutFile -Verbose(#24041) - Исправление webCmdlets, когда
-Bodyуказан, ноContentTypeне указан (#23952) (благодаря @CarloToso!)) - Исправить
Invoke-WebRequestдля правильной передачи размера, когда указано-Resume(#20207) (спасибо @LNKLEO!)) - Исправление веб-командлетов для
WinFormправильной работы приложений (#20606)
Другие улучшения командлетов
- Исправьте
Out-GridView, заменив использование устаревшегоBinaryFormatterна пользовательскую реализацию (#25559) - Включить
-NoRestartдля работы сRegister-PSSessionConfiguration(#23891) - Добавление параметров
IgnoreCommentsиAllowTrailingCommasв командлетTest-Json(#23817) (спасибо @ArmaanMcleod!)) - Get-Help могут сообщать параметры с атрибутом
ValueFromRemainingArgumentsкак подходящие для конвейерной обработки (#23871) - Измените тип
LineNumberнаulongвSelect-String(#24075) (Спасибо, @Snowman-25!)) -
Get-Process: удаление требования администратора для-IncludeUserName(No 21302) (спасибо) @jborean93!) - Исправлено
Test-Path -IsValid, чтобы проверить наличие недопустимых символов пути и имени файла (#21358) - Добавить
RecommendedActionкConciseViewв отчет об ошибках (№ 20826) (Спасибо @JustinGrote!)) - Добавлена полоса прогресса для
Remove-Itemкомандлета (#20778) (спасибо @ArmaanMcleod!)) - Исправление
Test-Connectionиз-за изменений .NET 8 (#20369) - Исправление
Get-Serviceсообщения об ошибке, которое не прекращается, для добавления категории (#20276) - Добавьте
-Emptyи-InputObjectпараметры кNew-Guid(№ 20014) (спасибо @CarloToso!)) - Добавьте псевдоним
rв параметр-RecurseдляGet-ChildItemкоманды (#20100) (спасибо) @kilasuit!) - Добавьте
LPвLiteralPathдля псевдонимов функций, которые всё ещё не имеют его (#20820) - Добавьте резервную
Import-LocalizedDataверсию неявной локализации (No 19896) (спасибо) @chrisdent-de!) - Добавьте
Aliasesв свойства, отображаемые при форматировании содержимого справки параметра, возвращаемогоGet-Help(#20994) - Добавление
HelpUriвRemove-Service(#20476) - Исправлена ошибка завершения для поставщика SCCM (#20815, #20919, #20915) (спасибо) @MartinGC94!)
- Исправлена регрессия при совместном использовании
Get-Content,-Tail 0и-Wait(#20734) (спасибо @CarloToso!)) - Исправьте
Start-Process -PassThru, чтобы убедиться, чтоExitCodeсвойство доступно для возвращаемогоProcessобъекта (#20749). (Спасибо @CodeCyclone!)) - Исправить
Group-Objectдля использования текущей культуры для его вывода (#20608) - Исправление
Group-Objectвыходных данных с помощью интерполированных строк (No 20745) (спасибо) @mawosoft!) - Исправлена отрисовка
DisplayRootдля сетиPSDrive(No 20793) - Исправить отображение хода выполнения, чтобы показывать 'Завершено' только после копирования всех файлов (
Copy-Item) - Исправлена регрессия завершения пути UNC (No 20419) (благодарим @MartinGC94!)
- Сообщить об ошибке, если недопустимая
-ExecutionPolicyпередана вpwsh(#20460) - Добавление модулей WinGetCommandNotFound и CompletionPredictor для отслеживания использования (#21040)
- Добавление параметра DateKind в
ConvertFrom-Json(#20925) (спасибо) @jborean93!) - Добавьте DirectoryInfo в OutputType для New-Item (#21126) (спасибо @MartinGC94!)
- Исправлена
Get-Errorсериализация значений массива (#21085) (спасибо) @jborean93!) - Исправьте
Test-ModuleManifest, чтобы можно было использовать UNC-путь (#24115) - Исправить
Get-TypeData, чтобы данные записывались в конвейер немедленно, вместо предварительного сбора данных (#24236) (Спасибо @MartinGC94)) - Добавьте
-Forceпараметр к командлетамResolve-PathиConvert-Pathдля поддержки скрытых файлов с подстановочными знаками #20981 (спасибо @ArmaanMcleod!). - Явное определение стандартных дескрипторов при запуске процесса с
-NoNewWindow(#25324) - Сделайте унаследованные защищенные элементы внутреннего экземпляра доступными в области класса. (No 25547) (Спасибо @mawosoft!)
- Удалите старое нечеткое предложение и исправьте предложение имени файла локального скрипта (#25330)
- Метод Fix
PSMethodInvocationConstraints.GetHashCode(#25306) (спасибо) @crazyjncsu!)
Улучшения подсистемы
- Переместите логирование вызова метода .NET после завершения необходимого преобразования типов для аргументов метода (#25357)
- Возврат к AppLocker после сбоя
WldpCanExecuteFile(#25305) - Явно запустите и остановите цвет ошибки ANSI (#24065) (спасибо) @JustinGrote!)
- Улучшение определения перегрузки .NET для универсальных методов (#21326) (спасибо) @jborean93!)
-
+=Оптимизируйте операцию для коллекции, когда это массив объектов (#23901) (спасибо)@jborean93!) - Добавление телеметрии для проверки определенных тегов при импорте модуля (#20371)
- Добавление
PSAdapterиConsoleGuiToolsв список разрешений загрузки телеметрии модуля (#20641) - Добавление модуля WinGet для отслеживания использования (#21040)
- Убедитесь, что имя файла не равно NULL при ведения журнала событий WDAC ETW (#20910) (спасибо) @jborean93!)
- Исправлены четыре регрессии, представленные функцией ведения журнала WDAC (#20913)
- Оставьте входные, выходные и ошибки без изменений, если они не перенаправлены (#20853)
- Исправление неявных командлетов прокси-сервера для удаленного взаимодействия с общими параметрами (#20367)
- Включите версию модуля в сообщения об ошибках, если модуль не найден (No 20144) (спасибо) @ArmaanMcleod!)
- Исправление
unixmodeдля обработкиsetuidиstickyкогда файл не является исполняемым файлом (#20366) - Исправлено использование сборки для использования Path.Combine при создании путей сборки (#21169)
- Проверьте значение использования пространства имен во время семантических проверок, чтобы предотвратить объявление недопустимых пространств имен (#21162)
- Обработка глобального инструмента специально при подготовке
$PSHOMEк PATH (#24228)
Экспериментальные функции
Следующие экспериментальные функции были преобразованы в основные функции в PowerShell 7.5-rc.1:
В PowerShell 7.5-rc.1 включены следующие экспериментальные функции:
- PSRedirectToVariable — разрешить перенаправление в переменную (#20381)
- PSNativeWindowsTildeExpansion — добавление расширения тильды для исполняемых файлов Windows (No 20402) (спасибо) @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Jsonтеперь обрабатывает большие перечисления как числа (No 20999) (спасибо @jborean93!)
Улучшения производительности
PowerShell 7.5-rc.1 включал PR#23901 , @jborean93 что повышает производительность += операции для массива объектов.
В следующем примере измеряется производительность различных методов добавления элементов в массив.
$tests = @{
'Direct Assignment' = {
param($count)
$result = foreach($i in 1..$count) {
$i
}
}
'List<T>.Add(T)' = {
param($count)
$result = [Collections.Generic.List[int]]::new()
foreach($i in 1..$count) {
$result.Add($i)
}
}
'Array+= Operator' = {
param($count)
$result = @()
foreach($i in 1..$count) {
$result += $i
}
}
}
5kb, 10kb | ForEach-Object {
$groupResult = foreach($test in $tests.GetEnumerator()) {
$ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds
[pscustomobject]@{
CollectionSize = $_
Test = $test.Key
TotalMilliseconds = [Math]::Round($ms, 2)
}
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
}
$groupResult = $groupResult | Sort-Object TotalMilliseconds
$groupResult | Select-Object *, @{
Name = 'RelativeSpeed'
Expression = {
$relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
$speed = [Math]::Round($relativeSpeed, 2).ToString() + 'x'
if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
}
} | Format-Table -AutoSize
}
При запуске скрипта в PowerShell 7.4.6 вы увидите, что использование оператора += является самым медленным методом.
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.17 1x
5120 List<T>.Add(T) 90.79 21.77x slower
5120 Array+= Operator 342.58 82.15x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 0.64 1x
10240 List<T>.Add(T) 184.10 287.66x slower
10240 Array+= Operator 1668.13 2606.45x slower
При запуске скрипта в PowerShell 7.5-rc.1 вы увидите, что использование оператора += гораздо быстрее, чем PowerShell 7.4.6. Теперь это также быстрее, чем использование метода List<T>.Add(T).
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.71 1x
5120 Array+= Operator 40.42 8.58x slower
5120 List<T>.Add(T) 92.17 19.57x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 1.76 1x
10240 Array+= Operator 104.73 59.51x slower
10240 List<T>.Add(T) 173.00 98.3x slower