Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O PowerShell 7.5.4 inclui os seguintes recursos, atualizações e alterações de quebra. O PowerShell 7.5.4 foi criado na versão .NET 9.0.306.
Para obter uma lista completa das alterações, consulte o CHANGELOG no repositório GitHub. Para obter mais informações sobre o .NET 9, consulte O que há de novo no .NET 9.
Alterações Disruptivas
- Correção
-OlderThane parâmetros para-NewerThanquando usarTest-Pathe intervalo de datas (PathType) (Obrigado@ArmaanMcleod!)- Anteriormente
-OlderThanseria ignorado se especificado em conjunto
- Anteriormente
- Alterar
New-FileCatalog -CatalogVersionpadrão para 2 (#20428) (Obrigado @ThomasNieto!) - Bloquear a obtenção de ajuda de locais de rede em sessões de comunicação remota restritas (#20593)
- O instalador do Windows agora lembra as opções de instalação usadas e as usa para inicializar as opções para a próxima instalação (#20420) (Obrigado @reduckted!)
-
ConvertTo-Jsonagora serializaBigIntegercomo um número (#21000) (Obrigado @jborean93!)
Módulos atualizados
O PowerShell 7.5.4 inclui os seguintes módulos atualizados:
- Microsoft.PowerShell.PSResourceGet v1.1.1
- PSReadLine v2.3.6
Melhorias na completação automática
Muito obrigado a @ArmaanMcleod e outros por todo o seu trabalho para melhorar o preenchimento de guias.
- Volte à inferência de tipo quando o valor-chave hashtable não puder ser recuperado da expressão segura (#21184) (Obrigado @MartinGC94!)
- Corrigir a regressão ao fazer inferência de tipo para
$_(#21223) (Obrigado @MartinGC94!) - Expanda
~para$HOMEno Windows com conclusão de tabulação (#21529) - Não conclua ao declarar o nome do parâmetro e o membro da classe (#21182) (Obrigado @MartinGC94!)
- Impedir fallback para conclusão automática de arquivos quando pressionar 'tab' ao completar nomes de tipo (#20084) (Obrigado @MartinGC94)
- Adicionar argumento completer a
-VersionparaSet-StrictMode(#20554) (Obrigado @ArmaanMcleod!) - Adicionar preenchedor de argumentos para
-VerbGet-Verb/ e refatorarGet-Command(Get-Verb) (Obrigado - Adicionar completer de argumento para
-Verb(Start-Process) (Obrigado ) - Adicionar
argumento completer para os comandos , & ( #20451 ) (Obrigado - Adicionar
-Moduleconclusão para os comandosSave-Help/Update-Help(#20678) (Obrigado @ArmaanMcleod))
Novos cmdlets
- Adicionar
ConvertTo-CliXmleConvertFrom-CliXmlcmdlets (#21063) (Obrigado @ArmaanMcleod!)
Melhorias nos cmdlets Web
- Correção para permitir
-PassThrue-Outfiletrabalhar em conjunto (#24086) - Adicionar
OutFilepropriedade emWebResponseObject(#24047) - Mostrar nome do arquivo em
Invoke-WebRequest -OutFile -Verbose(#24041) - Corrige os WebCmdlets quando
-Bodyé especificado, masContentTypenão (#23952) (Obrigado @CarloToso!) - Correção
Invoke-WebRequestpara relatar o tamanho correto quando-Resumeestá especificado (#20207) (Obrigado @LNKLEO!) - Corrigir cmdlets da Web para permitir que os
WinFormaplicativos funcionem corretamente (#20606)
Outras melhorias no cmdlet
- Corrigir
Out-GridViewsubstituindo o uso de obsoletosBinaryFormatterpor implementação personalizada (#25559) - Habilitar
-NoRestartpara trabalhar comRegister-PSSessionConfiguration(#23891) - Adicionar
IgnoreCommentseAllowTrailingCommasopções aoTest-Jsoncmdlet (#23817) (Obrigado @ArmaanMcleod!) - Get-Help pode relatar parâmetros com atributo
ValueFromRemainingArgumentscomo adequados para integrar em pipeline (#23871) - Alterar o tipo de
LineNumberparaulonginSelect-String(#24075) (Obrigado @Snowman-25!) -
Get-Process: Remover requisito de administrador para-IncludeUserName(#21302) (Obrigado @jborean93!) - Correção
Test-Path -IsValidpara verificar os caracteres de caminho e nome de arquivo inválidos (#21358) - Adicionar
RecommendedActionaoConciseViewrelatório de erros (#20826) (Obrigado @JustinGrote!) - Adicionada barra de progresso para
Remove-Itemcmdlet (#20778) (Obrigado @ArmaanMcleod!) - Corrigir
Test-Connectiondevido a alterações do .NET 8 (#20369) - Corrigir
Get-Servicemensagem de erro não terminativa para incluir categoria (#20276) - Adicionar
-Emptye-InputObjectparâmetros paraNew-Guid(#20014) (Obrigado @CarloToso!) - Adicione o alias
rao parâmetro-Recursepara oGet-ChildItemcomando (#20100) (Obrigado @kilasuit!) - Adicionar
LPaos aliases dasLiteralPathfunções que ainda não o têm (#20820) - Adicionar retorno de localização implícita a
Import-LocalizedData(#19896) (Obrigado @chrisdent-de!) - Adicionar
Aliasesàs propriedades mostradas ao formatar o conteúdo da ajuda do parâmetro retornado porGet-Help(#20994) - Adicionar
HelpUriaRemove-Service(#20476) - Corrigir erro de conclusão para o provedor SCCM (#20815, #20919, #20915) (Obrigado @MartinGC94!)
- Corrigir regressão em
Get-Contentquando-Tail 0e-Waitsão usados juntos (#20734) (Obrigado @CarloToso!) - Correção
Start-Process -PassThrupara garantir que aExitCodepropriedade esteja acessível para o objeto retornadoProcess(#20749) (Obrigado @CodeCyclone!) - Resolva
Group-Objectpara usar a cultura atual na sua saída (#20608) - Corrigir
Group-Objectsaída usando strings interpoladas (#20745) (Obrigado a @mawosoft!)) - Corrigir renderização de
DisplayRootpara redePSDrive(#20793) - Corrija
Copy-Itemo progresso para mostrar concluído apenas quando todos os arquivos forem copiados (#20517) - Corrigir regressão de conclusão de caminho UNC (#20419) (Obrigado @MartinGC94!)
- Relatar erro se um
-ExecutionPolicyinválido for passado parapwsh(#20460) - Adicione os módulos WinGetCommandNotFound e CompletionPredictor para controlar o uso (#21040)
- Adicionar parâmetro DateKind a
ConvertFrom-Json(#20925) (Obrigado @jborean93!) - Adicionar DirectoryInfo ao TipoDeSaída para New-Item (#21126) (Obrigado @MartinGC94!)
- Corrigir
Get-Errora serialização de valores de matriz (#21085) (Obrigado @jborean93!) - Correção
Test-ModuleManifestpara que ele possa usar um caminho UNC (#24115) - Correção
Get-TypeDatapara gravar no pipeline imediatamente em vez de coletar dados primeiro (#24236) (Obrigado @MartinGC94) - Adicionar o parâmetro
-Forceaos cmdletsResolve-PatheConvert-Pathpara suportar ficheiros ocultos com caracteres curinga #20981 (Obrigado @ArmaanMcleod!) - Definir manipuladores padrão explicitamente ao iniciar um processo com
-NoNewWindow(#25324) - Torne os membros herdados da instância interna protegida acessíveis no escopo da classe. (#25547) (Obrigado @mawosoft!)
- Remova a sugestão difusa antiga e corrija a sugestão de nome de arquivo de script local (#25330)
- Método Fix
PSMethodInvocationConstraints.GetHashCode(#25306) (Obrigado @crazyjncsu!)
Melhorias no motor
- Mover o registo de invocação do método .NET para após a conversão de tipo necessária ser feita nos argumentos do método (#25357)
- Fallback para AppLocker após
WldpCanExecuteFile(#25305) - Explicitamente iniciar e parar ANSI Error Color (#24065) (Obrigado @JustinGrote!)
- Melhorar a definição de sobrecarga .NET de métodos genéricos (#21326) (Obrigado @jborean93!))
- Otimizar a
+=operação para uma coleção quando é uma matriz de objetos (#23901) (Obrigado @jborean93!) - Adicionar telemetria para verificar tags específicas ao importar um módulo (#20371)
- Adicionar
PSAdaptereConsoleGuiToolsà lista de autorização da telemetria de carregamento do módulo (#20641) - Adicionar módulo WinGet para controlar o uso (#21040)
- Verifique se o nome do arquivo não é nulo ao registrar eventos WDAC ETW (#20910) (Obrigado @jborean93!)
- Corrigir quatro regressões introduzidas pelo recurso de log WDAC (#20913)
- Deixe os manipuladores de entrada, saída e erro indefinidos quando não estiverem redirecionados (#20853)
- Corrigir cmdlets de proxy de comunicação remota implícita para agir em parâmetros comuns (#20367)
- Incluir a versão do módulo em mensagens de erro quando o módulo não for encontrado (#20144) (Obrigado @ArmaanMcleod!)
- Corrigir
unixmodepara lidar comsetuidestickyquando o ficheiro não é um executável (#20366) - Corrigir a utilização de assembly para empregar Path.Combine ao construir caminhos de assembly (#21169)
- Validar o valor para usar namespace durante verificações semânticas para evitar a declaração de namespaces inválidos (#21162)
- Gerir a ferramenta global especialmente quando estiver a adicionar
$PSHOMEao PATH (#24228)
Funcionalidades experimentais
Os seguintes recursos experimentais foram convertidos em recursos principais no PowerShell 7.5-rc.1:
Os seguintes recursos experimentais estão incluídos no PowerShell 7.5-rc.1:
- PSRedirectToVariable - Permitir o redirecionamento para uma variável (#20381)
- PSNativeWindowsTildeExpansion - Adicionar expansão do til para executáveis nativos do Windows (#20402) (Obrigado @domsleee!))
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Jsonagora trata grandes enums como números (#20999) (Obrigado @jborean93!)
Melhorias de desempenho
O PowerShell 7.5-rc.1 incluiu PR#23901 do @jborean93 que melhora o desempenho da operação de += para uma matriz de objetos.
O exemplo a seguir mede o desempenho de diferentes métodos de adição de elementos a uma matriz.
$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
}
Quando você executa o script no PowerShell 7.4.6, você vê que usar o operador += é o método mais lento.
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
Quando você executa o script no PowerShell 7.5-rc.1, você vê que usar o operador += é muito mais rápido do que o PowerShell 7.4.6. Agora, também é mais rápido do que usar o método 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