O que há de novo no PowerShell 7.4

O PowerShell 7.4 inclui os seguintes recursos, atualizações e alterações de quebra. O PowerShell 7.4 é baseado no .NET 8.0.0.

Para obter uma lista completa das alterações, consulte o CHANGELOG no repositório GitHub.

Alterações interruptivas

  • As imagens do docker do servidor Nano não estão disponíveis para esta versão
  • Adicionado o parâmetro ProgressAction aos parâmetros comuns
  • Atualize algumas APIs do PowerShell para lançar ArgumentException em vez de ArgumentNullException quando o argumento for uma cadeia de caracteres vazia (#19215) (Obrigado@xtqqczze!)
  • Remover código relacionado a #requires -pssnapin (#19320)
  • Test-Json agora usa JsonSchema.NET em vez de Newtonsoft.Json.Schema.
    • Com essa alteração, Test-Json não suporta mais os esquemas mais antigos do Draft 4. (#18141) (Obrigado @gregsdennis!). Para obter mais informações sobre esquemas JSON, consulte a documentação do esquema JSON. Isso também quebra Test-Json para arquivos JSON e JSONC com comentários.
    • ConvertFrom-Json suporte ainda usa Newtonsoft.Json.Schema para que possa converter arquivos JSON com comentários.
  • A saída de agora inclui informações mais detalhadas sobre testes de Test-Connection conexão TCP
  • O .NET introduziu alterações que afetaram o Test-Connection. O cmdlet agora retorna um erro sobre a necessidade de usar sudo em plataformas Linux ao usar um tamanho de buffer personalizado (#20369)
  • O recurso experimental PSNativeCommandPreserveBytePipe agora é mainstream. O PowerShell agora preserva os dados de fluxo de bytes ao redirecionar o fluxo stdout de um comando nativo para um arquivo ou ao canalizar dados de fluxo de bytes para o fluxo stdin de um comando nativo.
  • Alterar como os caminhos relativos são manipulados ao Resolve-Path usar o parâmetro RelativeBasePath (#19755) (Obrigado @MartinGC94!)
  • Remover código PSv2 não utilizado - remove a função TabExpansion (#18337)

Atualizações do instalador

O pacote MSI do Windows agora fornece uma opção para desabilitar a telemetria do PowerShell durante a instalação. Para obter mais informações, consulte Instalar o pacote msi a partir da linha de comando.

Versões atualizadas do PSResourceGet e PSReadLine

O PowerShell 7.4 inclui Microsoft.PowerShell.PSResourceGet v1.0.1. Este módulo é instalado lado a lado com o PowerShellGet v2.2.5 e o PackageManagement v1.4.8.1. Para obter mais informações, consulte a documentação de Microsoft.PowerShell.PSResourceGet.

O PowerShell 7.4 agora inclui PSReadLine v2.3.4. Para obter mais informações, consulte a documentação do PSReadLine.

Melhorias na conclusão de guias

Muito obrigado a @MartinGC94 e outros por todo o seu trabalho para melhorar a conclusão das guias.

  • Corrigir problema ao concluir o primeiro comando em um script com uma expressão de matriz vazia (#18355)
  • Corrigir conclusão de argumento posicional (#17796)
  • Priorizar o conjunto de parâmetros padrão ao concluir argumentos posicionais (#18755)
  • Melhorar a pseudo-ligação para parâmetros dinâmicos (#18030)
  • Melhorar a inferência de tipo de chaves hashtable (#17907)
  • Corrigir erro de inferência de tipo para instruções de retorno vazias (#18351)
  • Melhorar a inferência de tipo para Get-Random (#18972)
  • Corrigir inferência de tipo para todas as variáveis de escopo (#18758)
  • Melhorar a enumeração de tipos inferidos no pipeline (#17799)
  • Adicione conclusão para valores em comparações ao comparar Enums (#17654)
  • Adicionar conclusão de atribuição de propriedade para enums (#19178)
  • Correção de conclusão para propriedades da variável PSCustomObject (#18682)
  • Corrigir conclusão de membro no argumento de atributo (#17902)
  • Excluir aliases de parâmetros redundantes dos resultados de conclusão (#19382)
  • Corrigir conclusão de membro de classe para classes com tipos base (#19179)
  • Adicionar conclusão para Usar palavras-chave (#16514)
  • Corrigir vazamento de variável TabExpansion2 ao completar variáveis (#18763)
  • Habilitar a conclusão de variáveis nos escopos do ScriptBlock (#19819)
  • Corrigir o preenchimento da variável de instrução foreach (#19814)
  • Corrigir precedência de inferência de tipo de variável (#18691)
  • Corrigir conclusão de membro para a classe Enum do PowerShell (#19740)
  • Corrigir a análise de literais de matriz em expressões de índice em chamadas de método (#19224)
  • Melhorar a conclusão do caminho (#19489)
  • Corrigir um erro de indexação fora do limite em CompleteInput para entrada de script vazia (#19501)
  • Melhorar o desempenho de conclusão variável (#19595)
  • Melhorar a conclusão da chave Hashtable para atribuições de variáveis restritas por tipo, Hashtables aninhadas e muito mais (#17660)
  • Inferir saída de aplicativo externo como strings (#19193)
  • Atualização de conclusão de parâmetros para enums para excluir valores não permitidos por ValidateRange atributos (#17750) (Obrigado @fflaten!).
  • Corrigir conclusão de parâmetros dinâmicos (#19510)
  • Adicionar conclusão para variáveis atribuídas pela instrução Data (#19831)
  • Corrija o til de expansão (~) em sistemas Windows para $home evitar casos de uso com comandos nativos (#21529)

Melhorias no cmdlet da Web

Muito obrigado a @CarloToso e outros por todo o trabalho na melhoria dos cmdlets da Web.

  • Corrigir a descompactação em cmdlets da Web para incluir Brotli (#17955) (Obrigado @iSazonov!)
  • Webcmdlets adicionam 308 para redirecionar códigos e pequenas limpezas (#18536)
  • Conclua a renderização da barra de progresso em Invoke-WebRequest quando o download estiver concluído ou cancelado (#18130)
  • Os cmdlets da Web obtêm o intervalo Retry-After dos cabeçalhos de resposta se o código de status for 429 (#18717)
  • Os cmdlets da Web definem a codificação de conjunto de caracteres padrão como UTF8 (#18219)
  • Preservar WebSession.MaximumRedirection de alterações (#19190)
  • Os WebCmdlets analisam a declaração XML para obter o valor de codificação, se presente. (#18748)
  • Correção usando xml -Body em webcmdlets sem uma codificação (#19281)
  • Ajuste o comportamento do método PUT para POST um para o tipo de conteúdo padrão em WebCmdlets (#19152)
  • Leve em consideração ContentType de cabeçalhos em WebCmdlets (#19227)
  • Permitir preservar o método HTTP original adicionando -PreserveHttpMethodOnRedirect a cmdlets da Web (#18894)
  • Webcmdlets exibem um erro no redirecionamento https para http (#18595)
  • Adicionar opção AllowInsecureRedirect a cmdlets da Web (#18546)
  • Melhorar a mensagem detalhada em cmdlets da Web quando o comprimento do conteúdo é desconhecido (#19252)
  • Crie o URI relativo para links da resposta em Invoke-WebRequest (#19092)
  • Corrigir redirecionamento para -CustomMethod POST em WebCmdlets (#19111)
  • Eliminar resposta anterior em Webcmdlets (#19117)
  • Melhorar o Invoke-WebRequest formato de erros xml e json (#18837)
  • Adicionar parâmetros ValidateNotNullOrEmpty aos parâmetros OutFile e InFile dos WebCmdlets (#19044)
  • Lista de cabeçalhos de atualização HttpKnownHeaderNames (#18947)
  • Invoke-RestMethod -FollowRelLink corrigir links contendo vírgulas (#18829)
  • Corrigir bug com gerenciamento de redirecionamento e KeepAuthorization em cmdlets da Web (#18902)
  • Adicionar StatusCode a HttpResponseException (#18842)
  • Suporte a conexões persistentes HTTP em cmdlets da Web (#19249) (Obrigado @stevenebutler!)
  • Pequena limpeza Invoke-RestMethod (#19490)
  • Melhorar a mensagem detalhada dos WebCmdlets para mostrar a versão HTTP correta (#19616)
  • Adicionar FileNameStar a MultipartFileContent em WebCmdlets (#19467)
  • Corrija o status HTTP de 409 para 429 para WebCmdlets para obter o intervalo de repetição do cabeçalho Retry-After. (#19622) (Obrigado @mkht!)
  • Alterar -TimeoutSec e adicionar -OperationTimeoutSeconds a -ConnectionTimeoutSeconds cmdlets da Web (#19558) (Obrigado @stevenebutler!) Outros cmdlets
  • Suporte Ctrl+c quando a conexão trava durante a leitura de dados em WebCmdlets (#19330) (Obrigado @stevenebutler!)
  • Suporte a soquete de domínio Unix em WebCmdlets (#19343)

Outras melhorias no cmdlet

  • Test-Connection agora retorna erro sobre a necessidade de usar sudo em plataformas Linux ao usar um tamanho de buffer personalizado (#20369)
  • Adicionar tipos de saída aos comandos Formatar (#18746) (Obrigado @MartinGC94!)
  • Adicionar atributos de tipo de saída para Get-WinEvent (#17948) (Obrigado @MartinGC94!)
  • Adicionar parâmetros Path e LiteralPath ao Test-Json cmdlet (#19042) (Obrigado @ArmaanMcleod!)
  • Adicionar parâmetro NoHeader a ConvertTo-Csv e Export-Csv cmdlets (#19108) (Obrigado @ArmaanMcleod!)
  • Adicionar parâmetros Confirm e WhatIf a Stop-Transcript(#18731) (Obrigado @JohnLBevan!)
  • Adicione o parâmetro FuzzyMinimumDistance a Get-Command (#18261)
  • Tornar o parâmetro Encoding capaz de usar ANSI codificação no PowerShell (#19298) (Obrigado @CarloToso!)
  • Adicionar progresso a Copy-Item (#18735)
  • Update-Help agora relata um erro ao usar a cultura implícita em sistemas fora dos EUA. (#17780) (Obrigado @dkaszews!)
  • Não exija atividade ao criar um registro de progresso concluído (#18474) (Obrigado @MartinGC94!)
  • Não permitir valores negativos para Get-Content parâmetros -Head de cmdlet e -Tail (#19715) (Obrigado @CarloToso!)
  • Cometa Update-Help um erro adequado quando a cultura atual não está associada a um idioma (#19765) (Obrigado @josea!)
  • Permitir a combinação de -Skip parâmetros e -SkipLast no Select-Object cmdlet. (#18849) (Obrigado @ArmaanMcleod!)
  • Adicionar Get-SecureRandom cmdlet (#19587)
  • Set-Clipboard -AsOSC52 para uso remoto (#18222) (Obrigado @dkaszews!)
  • Acelerar a Resolve-Path resolução do caminho relativo (#19171) (Obrigado @MartinGC94!)
  • Adicionado o parâmetro -CaseInsensitive switch para Select-Object e Get-Unique cmdlets (#19683) (Obrigado @ArmaanMcleod!)
  • Restart-Computer e Stop-Computer deve falhar com erro quando não estiver executando via sudo no Unix (#19824)

Melhorias no motor

Atualizações para $PSStyle

  • Adiciona propriedades Dim e DimOff (#18653)
  • Adicionados métodos estáticos à classe PSStyle que mapeiam valores ConsoleColor em primeiro plano e plano de fundo para sequências de escape ANSI (#17938)
  • Os cabeçalhos de tabela para campos calculados são formatados em itálico por padrão
  • Adicionar suporte de respeito $PSStyle.OutputRendering no host remoto (#19601)
  • Dados de telemetria atualizados para incluir o uso de CrescendoBuilt módulos (#20371)

Outras atualizações do mecanismo

  • Tornar a classe PowerShell não afiliada ao Runspace ao declarar o NoRunspaceAffinity atributo (#18138)
  • Adicione o ValidateNotNullOrWhiteSpace atributo (#17191) (Obrigado @wmentha!)
  • Adicionar sqlcmd à lista para passagem de argumentos herdados (#18559)
  • Adicionar a função cd~ (#18308) (Obrigado @GigaScratch!)
  • Corrigir análise de tipo de matriz em tipos genéricos (#19205) (Obrigado @MartinGC94!)
  • Corrigir globbing curinga na raiz dos caminhos do dispositivo (#19442) (Obrigado @MartinGC94!)
  • Adicionar uma API pública para obter locais de elementos PSModulePath (#19422)
  • Corrigir string incorreta para conversão de tipo (#19560) (Obrigado @MartinGC94!)
  • Corrigir a execução lenta quando muitos pontos de interrupção são usados (#14953) (Obrigado @nohwnd!)
  • Remover código relacionado a #requires -pssnapin (#19320)

Características experimentais

O PowerShell 7.4 apresenta os seguintes recursos experimentais:

  • PSFeedbackProvider - Substitui a estrutura de sugestões codificada por um provedor de feedback extensível.
    • Esse recurso também adiciona as propriedades FeedbackName, FeedbackText e FeedbackAction para $PSStyle.Formatting que você altere a formatação das mensagens de feedback.
  • PSModuleAutoLoadSkipOfflineFiles - A descoberta de módulos agora ignora arquivos marcados por provedores de nuvem como não totalmente no disco.
  • PSCommandWithArgs - Adicione suporte para passar argumentos para comandos como uma única cadeia de caracteres

As seguintes características experimentais tornaram-se comuns:

O PowerShell 7.4 alterou os seguintes recursos experimentais:

Para obter mais informações sobre os recursos experimentais, consulte Usando recursos experimentais.