Novidades no PowerShell 7.4

O PowerShell 7.4 inclui os recursos, as atualizações e as alterações da falha a seguir. O PowerShell 7.4 é criado no .NET 8.0.0.

Para ver uma lista completa das alterações, confira o LOG DE MUDANÇAS no repositório do GitHub.

Alterações de quebra

  • As imagens do docker do nano server não estão disponíveis para esta versão
  • O parâmetro ProgressAction foi adicionado aos parâmetros comuns
  • Atualização de algumas APIs do PowerShell para gerar ArgumentException em vez de ArgumentNullException quando o argumento era uma cadeia de caracteres vazia (nº 19215) (Agradecimentos a @xtqqczze!)
  • Remoção do 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 deixou de oferecer suporte para os esquemas mais antigos do Draft 4. (nº 18141) (Agradecemos você,@gregsdennis!)! Para obter mais informações sobre esquemas JSON, veja a documentação do esquema JSON.
  • A saída de Test-Connection agora inclui informações mais detalhadas sobre testes de conexão TCP
  • O .NET introduziu alterações que afetaram Test-Connection. O cmdlet agora retorna um erro sobre a necessidade de usar sudo em plataformas Linux ao usar um tamanho de buffer personalizado (nº 20369)
  • O recurso experimental PSNativeCommandPreserveBytePipe passou a ter suporte base. O PowerShell já preserva os dados de fluxo de bytes ao redirecionar o fluxo stdout de um comando nativo para um arquivo ou ao direcionar dados de fluxo de bytes para o fluxo stdin de um comando nativo.
  • Alteração de como os caminhos relativos em Resolve-Path são tratados quando o parâmetro RelativeBasePath é usado (nº 19755) (Agradecemos a @MartinGC94!)
  • Remoção do código PSv2 não utilizado: remove a função TabExpansion (nº 18337)

Atualizações do instalador

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

Versões atualizadas de 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, confira a documentação do Microsoft.PowerShell.PSResourceGet.

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

Aprimoramentos de conclusão da guia

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

  • Corrigir problema ao concluir o primeiro comando em um script com uma expressão de matriz vazia (nº 18355)
  • Correção do preenchimento do argumento posicional (nº 17796)
  • Priorização do conjunto de parâmetros padrão no preenchimento de argumentos posicionais (nº 18755)
  • Aprimoramento da pseudo associação para parâmetros dinâmicos (nº 18030)
  • Aprimoramento da inferência de tipos de chaves de tabela hash (nº 17907)
  • Correção do erro de inferência de tipo para instruções return vazias (nº 18351)
  • Aprimoramento da inferência de tipos para Get-Random (nº 18972)
  • Correção da inferência de tipo para todas as variáveis de escopo (nº 18758)
  • Aprimoramento da enumeração de tipos inferidos no pipeline (nº 17799)
  • Adição de preenchimento de valores em comparações ao comparar enumerações (nº 17654)
  • Adição do preenchimento da atribuição de propriedade para enumerações (nº 19178)
  • Correção do preenchimento das propriedades da variável PSCustomObject (nº 18682)
  • Correção da conclusão do membro no argumento de atributo (nº 17902)
  • Exclusão de aliases de parâmetro redundantes dos resultados de conclusão (#19382)
  • Correção do preenchimento de membro de classe para classes com tipos base (nº 19179)
  • Adição de preenchimento ao usar palavras-chave (nº 16514)
  • Correção do vazamento de variável TabExpansion2 ao concluir variáveis (#18763)
  • Habilitação da conclusão de variáveis entre escopos do ScriptBlock (#19819)
  • Correção da conclusão da variável de instrução foreach (#19814)
  • Correção da precedência de inferência de tipo de variável (#18691)
  • Correção da conclusão do membro para a classe Enum do PowerShell (#19740)
  • Correção da análise de literais de matriz em expressões de índice em chamadas de método (#19224)
  • Aperfeiçoamento da conclusão do caminho (#19489)
  • Correção de um erro de indexação fora do limite em CompleteInput para entrada de script vazia (#19501)
  • Aperfeiçoamento do desempenho de conclusão variável (#19595)
  • Aperfeiçoamento da conclusão da chave hashable para atribuições de variáveis restritas de tipo, Hashtables aninhados e muito mais (#17660)
  • Inferência da saída de aplicativo externo como cadeias de caracteres (#19193)
  • Atualização da conclusão do parâmetro para enumerações excluírem valores não permitidos por atributos ValidateRange (#17750) (Nossos agradecimentos, @fflaten!).
  • Corrigir a conclusão do parâmetro dinâmico (#19510)
  • Adicionar conclusão para variáveis atribuídas pela instrução Data (#19831)

Aprimoramentos do cmdlet da Web

Nossos agradecimentos, @CarloToso e outros por todo o trabalho na melhoria do cmdlets Web.

  • Corrigir descompactação em cmdlets da Web para incluir Brotli (#17955) (Obrigado, @iSazonov!)
  • Webcmdlets adicionam 308 para redirecionar códigos e limpezas pequenas (#18536)
  • Conclua a renderização da barra de progresso em Invoke-WebRequest quando o download for concluído ou cancelado (#18130)
  • Os cmdlets Web tinha o intervalo Retry-After dos cabeçalhos de resposta se o código de status era 429 (nº 18717)
  • Os cmdlets Web definam a codificação de conjunto de caracteres padrão como UTF8 (nº 18219)
  • Preservação do WebSession.MaximumRedirection de alterações (nº 19190)
  • Os WebCmdlets analisavam a declaração XML para obter o valor de codificação, se houvesse. (nº 18748)
  • Correção usando xml -Body em webcmdlets sem uma codificação (nº 19281)
  • Ajuste do comportamento do método PUT para POST para o tipo de conteúdo padrão em WebCmdlets (nº 19152)
  • Consideração de ContentType de Cabeçalhos em WebCmdlets (nº 19227)
  • Permissão da preservação do método HTTP original adicionando -PreserveHttpMethodOnRedirect aos cmdlets Web (#18894)
  • Webcmdlets exibia um erro em https para redirecionamento http (nº 18595)
  • Adição do switch AllowInsecureRedirect aos cmdlets Web (#18546)
  • Aprimoramento da mensagem detalhada em cmdlets da Web quando o comprimento do conteúdo era desconhecido (nº 19252)
  • Criação do URI relativo para links da resposta no Invoke-WebRequest (#19092)
  • Correção do redirecionamento de -CustomMethod POST em WebCmdlets (#19111)
  • Descartada a resposta anterior em Webcmdlets (nº 19117)
  • Aperfeiçoamento do formato de erros xml e json Invoke-WebRequest (#18837)
  • Adição de ValidateNotNullOrEmpty aos parâmetros OutFile e InFile de WebCmdlets (#19044)
  • Lista de cabeçalhos de atualização httpKnownHeaderNames (nº 18947)
  • Correção de links com vírgulas Invoke-RestMethod -FollowRelLink (#18829 )
  • Correção do bug com o gerenciamento de redirecionamento e KeepAuthorization em cmdlets da Web (nº 18902)
  • Adição de StatusCode a HttpResponseException (#18842)
  • Suporte a conexões persistentes HTTP em cmdlets web (nº 19249) (Agradecimentos a, @stevenebutler!)
  • Limpeza pequena Invoke-RestMethod (nº 19490)
  • Aperfeiçoamento da mensagem detalhada de WebCmdlets para mostrar a versão HTTP correta (#19616)
  • Adição de FileNameStar a MultipartFileContent em WebCmdlets (#19467)
  • Correção do status HTTP de 409 a 429 para WebCmdlets para obter o intervalo de repetição do cabeçalho Retry-After. (#19622) (Nossos agradecimentos, @mkht!)
  • Alteração de -TimeoutSec para -ConnectionTimeoutSeconds e adição do -OperationTimeoutSeconds aos cmdlets da Web (#19558) (Nossos agradecimentos, @stevenebutler!) Outros cmdlets
  • Suporte ao Ctrl+c quando a conexão trava durante a leitura de dados em WebCmdlets (#19330) (Nossos agradecimentos, @stevenebutler!)
  • Suporte ao soquete de domínio Unix em WebCmdlets (#19343)

Aprimoramentos de outros cmdlet

  • Test-Connection agora retorna um erro sobre a necessidade de usar sudo em plataformas Linux ao usar um tamanho de buffer personalizado (nº 20369)
  • Adição de tipos de saída aos comandos Format (#18746) (Nossos agradecimentos, @MartinGC94!)
  • Adição de atributos de tipo de saída para Get-WinEvent (#17948) (Nossos agradecimentos, @MartinGC94!)
  • Adição dos parâmetros Path e LiteralPath ao cmdlet Test-Json (#19042) (Graças a @ArmaanMcleod!)
  • Adição do parâmetro NoHeader aos cmdlets ConvertTo-Csv e Export-Csv (#19108) (Graças a @ArmaanMcleod!)
  • Adicionar parâmetros Confirm e WhatIf a Stop-Transcript(nº 18731) (Obrigado, @JohnLBevan!)
  • Adicionar parâmetro FuzzyMinimumDistance a Get-Command (nº 18261)
  • O parâmetro Encoding agora é capaz de aceitar a codificação ANSI no PowerShell (#19298) (Graças a @CarloToso!)
  • Adição do progresso ao Copy-Item (#18735)
  • Update-Help agora relata um erro ao usar a cultura implícita em sistemas que não são dos EUA. (nº 17780) (Obrigado, @dkaszews!)
  • Não exigir atividade ao criar um registro de progresso concluído (#18474) (Obrigado, @MartinGC94!)
  • Não permitir valores negativos para parâmetros Get-Content de cmdlet -Head e -Tail (#19715) (Nossos agradecimentos, @CarloToso!)
  • Fazer com que Update-Help apresente um erro adequado quando a cultura atual não estiver associada a um idioma (#19765) (Obrigado, @josea!)
  • Permissão da combinação de parâmetros -Skip e -SkipLast no cmdlet Select-Object. (#18849) (Nossos agradecimentos, @ArmaanMcleod!)
  • Adição do cmdlet Get-SecureRandom (#19587)
  • Set-Clipboard -AsOSC52 para uso remoto (#18222) (Nossos agradecimentos, @dkaszews!)
  • Aceleração da resolução do caminho relativo Resolve-Path (#19171) (Nossos agradecimentos, @MartinGC94!)
  • Foi adicionado o parâmetro switch -CaseInsensitive para os cmdlets Select-Object e Get-Unique (#19683) (Obrigado @ArmaanMcleod!)
  • Restart-Computer e Stop-Computer devem falhar com erro quando não estiverem sendo executados via sudo no Unix (#19824)

Aprimoramentos no mecanismo

Atualização para $PSStyle

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

Outras atualizações do Mecanismo

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

Recursos experimentais

O PowerShell 7.4 apresenta os seguintes recursos experimentais:

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

Os seguintes recursos experimentais tornaram-se comuns:

O PowerShell 7.4 alterou os seguintes recursos experimentais:

Para obter mais informações sobre os recursos experimentais, confira Usar recursos experimentais.