Partilhar via


Novidades no PowerShell 7.0

O PowerShell 7.0 é uma edição open-source e multiplataforma (Windows, macOS e Linux) do PowerShell, concebida para gerir ambientes heterogéneos e cloud híbrida.

Neste comunicado, vamos introduzir várias funcionalidades novas, incluindo:

  • Paralelização de pipeline com ForEach-Object -Parallel
  • Novos operadores:
    • Operador ternário: a ? b : c
    • Operadores da cadeia de oleodutos: || e &&
    • Operadores condicionais nulos: ?? e ??=
  • Uma vista de erro simplificada e dinâmica e Get-Error um cmdlet para facilitar a investigação de erros
  • Uma camada de compatibilidade que permite aos utilizadores importar módulos numa sessão implícita de PowerShell do Windows
  • Notificações automáticas de nova versão
  • A capacidade de invocar recursos DSC diretamente do PowerShell 7 (experimental)

Para ver a lista completa de funcionalidades e correções, consulte os registos de alterações.

Onde posso instalar o PowerShell?

O PowerShell 7 suporta atualmente os seguintes sistemas operativos em x64, incluindo:

  • Windows 8.1 e 10
  • Windows Server 2012, 2012 R2, 2016 e 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7
  • Fedora 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

Além disso, o PowerShell 7.0 suporta versões ARM32 e ARM64 do Debian, Ubuntu e ARM64 Alpine Linux.

Consulte as instruções de instalação do seu sistema operativo preferido:Windows, macOS ou Linux.

Embora não seja oficialmente suportado, a comunidade também forneceu pacotes para Arch e Kali Linux.

Observação

O Debian 10 e o CentOS 8 atualmente não suportam o remot do WinRM. Para detalhes sobre como configurar remotos baseados em SSH, veja PowerShell Remoting over SSH.

Para mais informações up-todatas sobre sistemas operativos suportados e ciclo de vida de suporte, consulte o Ciclo de Vida de Suporte PowerShell.

A correr o PowerShell 7

O PowerShell 7 instala-se num diretório separado do Windows PowerShell. Isto permite-lhe correr o PowerShell 7 lado a lado com o Windows PowerShell 5.1. Para o PowerShell 6.x, o PowerShell 7 é uma atualização no local que remove o PowerShell 6.x.

  • O PowerShell 7 está instalado para %programfiles%\PowerShell\7
  • A %programfiles%\PowerShell\7 pasta é adicionada a $env:PATH

O pacote de instaladores do PowerShell 7 atualiza versões anteriores do PowerShell 6.x:

  • PowerShell 6.x no Windows: %programfiles%\PowerShell\6 é substituído por %programfiles%\PowerShell\7
  • Linux: /opt/microsoft/powershell/6 é substituído por /opt/microsoft/powershell/7
  • macOS: /usr/local/microsoft/powershell/6 é substituído por /usr/local/microsoft/powershell/7

Observação

No Windows PowerShell, o executável para lançar o PowerShell chama-se powershell.exe. Na versão 6 e superiores, o nome do executável é alterado para suportar execução lado a lado. O novo nome do executável para lançar o PowerShell 7 é pwsh.exe. As versões de pré-visualização mantêm-se no local pwsh-preview em vez de pwsh estarem no diretório 7-prévia.

Compatibilidade retroativa melhorada com o Windows PowerShell

O PowerShell 7.0 marca uma transição para o .NET Core 3.1, permitindo uma compatibilidade retroativa significativamente maior com os módulos PowerShell existentes do Windows. Isto inclui muitos módulos no Windows que requerem funcionalidade de interface gráfica como Out-GridView e Show-Command, bem como muitos módulos de gestão de funções que são incluídos no Windows.

Para Windows, um novo parâmetro de comutação, UseWindowsPowerShell , é adicionado a Import-Module. Este interruptor cria um módulo proxy no PowerShell 7 que utiliza um processo local do Windows PowerShell para executar implicitamente quaisquer cmdlets contidos nesse módulo. Para mais informações sobre o Import-Module.

Para mais informações sobre quais os módulos Microsoft que funcionam com o PowerShell 7.0, consulte a Tabela de Compatibilidade de Módulos.

A implementação paralela foi adicionada à ForEach-Object

O ForEach-Object cmdlet, que itera itens numa coleção, tem agora paralelismo incorporado com o novo parâmetro Paralelo .

Por defeito, blocos de script paralelos usam o diretório de trabalho atual do chamador que iniciou as tarefas paralelas.

Este exemplo recupera 50.000 entradas de registo de 5 registos do sistema numa máquina Windows local:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

O parâmetro Parallel especifica o bloco de script que é executado em paralelo para cada nome de log de entrada.

O novo parâmetro ThrottleLimit limita o número de blocos de script a correr em paralelo num dado momento. A predefinição é 5.

Use a $_ variável para representar o objeto de entrada atual no bloco de script. Use o $using: scope para passar referências de variáveis ao bloco de script em execução.

Para mais informações sobre ForEach-Object.

Operador ternário

O PowerShell 7.0 introduz um operador ternário que se comporta como uma instrução simplificada if-else . O operador ternário do PowerShell é modelado de perto a partir da sintaxe do operador ternário C#:

<condition> ? <if-true> : <if-false>

A expressão condicional é sempre avaliada e o seu resultado convertido em Booleano para determinar qual ramo será avaliado a seguir:

  • A expressão <if-true> é executada se a expressão <condition> for verdadeira
  • A expressão <if-false> é executada se a expressão <condition> for falsa

Por exemplo:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

Neste exemplo, se o caminho existe, então Path existes é exibido. Se o caminho não existir, então Caminho não encontrado é exibido.

Para mais informações sobre o If.

Operadores de cadeia de oleodutos

O PowerShell 7 implementa os && operadores and || para encadear pipelines condicionalmente. Estes operadores são conhecidos no PowerShell como "operadores de cadeia de pipeline" e são semelhantes às listas AND e OR em shells como bash e zsh, bem como símbolos de processamento condicional no Windows Command Shell (cmd.exe).

O operador && executa o pipeline do lado direito, se o pipeline do lado esquerdo for bem-sucedido. Por outro lado, o operador || executa o pipeline do lado direito se o pipeline do lado esquerdo falhar.

Observação

Esses operadores usam as variáveis $? e $LASTEXITCODE para determinar se um pipeline falhou. Isso permite que você os use com comandos nativos e não apenas com cmdlets ou funções.

Aqui, o primeiro comando tem sucesso e o segundo comando é executado:

Write-Output 'First' && Write-Output 'Second'
First
Second

Aqui, o primeiro comando falha, o segundo não é executado:

Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad

Aqui, o primeiro comando tem sucesso, o segundo comando não é executado:

Write-Output 'First' || Write-Output 'Second'
First

Aqui, o primeiro comando falha, pelo que o segundo comando é executado:

Write-Error 'Bad' || Write-Output 'Second'
Write-Error 'Bad'
Second

Para mais informações Sobre Operadores de Cadeia de Pipeline.

Operadores de coalescimento nulo, atribuição e condicionais

O PowerShell 7 inclui operador ??de coalescência nulo , atribuição ??=condicional nula , e operadores ?. de acesso a membros condicionais nulos e ?[].

Operador de coalescência nula ??

O operador ?? de coalescência nula devolve o valor do seu operando da esquerda se não for nulo. Caso contrário, ele avalia o operando direito e retorna seu resultado. O operador ?? não avalia o operando à direita se o operando à esquerda for avaliado como não nulo.

$x = $null
$x ?? 100
100

No exemplo seguinte, o operando direito não será avaliado:

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operador de atribuição condicional nulo ?? =

O operador ??= de atribuição condicional nula atribui o valor do seu operando direito ao seu operando esquerdo apenas se o operando esquerdo for avaliado como nulo. O operador ??= não avalia o operando à direita se o operando à esquerda for avaliado como não nulo.

$x = $null
$x ??= 100
$x
100

No exemplo seguinte, o operando direito não é avaliado:

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operadores de acesso a membros condicionais nulos ?. E ? [] (Experimental)

Observação

Esta é uma funcionalidade experimental chamada PSNullConditionalOperators. Para mais informações, consulte Utilização de Funcionalidades Experimentais.

Um operador condicional nulo permite o acesso por membros, ?., ou acesso a elementos, ?[], ao seu operando apenas se esse operando for avaliado como não-nulo; caso contrário, devolve nulo.

Observação

Como o PowerShell permite que ? faça parte do nome da variável, a especificação formal do nome da variável é necessária para usar esses operadores. Por isso, é obrigatório usar {} em torno dos nomes das variáveis como ${a} ou quando ? faz parte do nome ${a?}da variável .

No exemplo seguinte, o valor do estado da propriedade membro é devoluído:

$Service = Get-Service -Name 'bits'
${Service}?.status
Stopped

O seguinte exemplo retorna nulo, sem tentar aceder ao nome do membro Estado:

$service = $Null
${Service}?.status

De forma semelhante, usando ?[], o valor do elemento é devolvido:

$a = 1..10
${a}?[0]
1

E quando o operando é nulo, o elemento não é acedido e o nulo é devolvido:

$a = $null
${a}?[0]

Para mais informações About_Operators.

Nova vista ConciseView e cmdlet Get-Error

O PowerShell 7.0 melhora a visualização das mensagens de erro para melhorar a legibilidade de erros interativos e de script com uma nova visualização padrão, a ConciseView. As vistas são selecionáveis pelo utilizador através da variável $ErrorViewde preferência .

Com o ConciseView, se um erro não for de um erro de script ou parser, então é uma mensagem de erro de uma linha:

Get-Childitem -Path c:\NotReal
Get-ChildItem: can't find path 'C:\NotReal' because it doesn't exist

Se o erro ocorrer durante a execução do script ou for um erro de análise sintática, o PowerShell devolve uma mensagem de erro multilinha que contém o erro, um ponteiro e uma mensagem de erro que indicam onde o erro está nessa linha. Se o terminal não suportar sequências de escape de cor ANSI (VT100), então as cores não são exibidas.

Exibição de erros a partir de um script

A vista padrão no PowerShell 7 é o ConciseView. A vista padrão anterior era NormalView e pode selecioná-la definindo a variável $ErrorViewpreferencial.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Observação

Uma nova propriedade ErrorAccentColor é adicionada $Host.PrivateData para suportar a alteração da cor de destaque da mensagem de erro.

Um novo cmdlet Get-Error fornece uma visão completa e detalhada do erro totalmente qualificado quando desejado. Por defeito, o cmdlet apresenta todos os detalhes, incluindo exceções internas, do último erro que ocorreu.

Exibição a partir do Get-Error

O Get-Error cmdlet suporta entrada do pipeline usando a variável $Errorincorporada . Get-Error Mostra todos os erros de canalização (pipeing).

$Error | Get-Error

O Get-Error cmdlet suporta o parâmetro Newest , permitindo-lhe especificar quantos erros da sessão atual deseja que sejam exibidos.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Para mais informações sobre o Get-Error.

Notificação de nova versão

O PowerShell 7 utiliza notificações de atualização para alertar os utilizadores sobre a existência de atualizações do PowerShell. Uma vez por dia, o PowerShell consulta um serviço online para determinar se uma versão mais recente está disponível.

Observação

A verificação de atualização ocorre durante a primeira sessão dentro de um determinado período de 24 horas. Por razões de desempenho, a verificação de atualização começa 3 segundos após o início da sessão. A notificação é mostrada apenas no início das sessões seguintes.

Por defeito, o PowerShell subscreve um de dois canais de notificação diferentes, dependendo da sua versão/ramificação. As versões suportadas e geralmente disponíveis (GA) do PowerShell apenas retornam notificações para lançamentos GA atualizados. Os lançamentos Preview and Release Candidate (RC) notificam atualizações em versões de pré-visualização, RC e GA.

O comportamento de notificação de atualização pode ser alterado usando a variável de ambiente $Env:POWERSHELL_UPDATECHECK. Os seguintes valores são suportados:

  • Padrão é o mesmo que não definir $Env:POWERSHELL_UPDATECHECK
    • Notificações de atualizações nas versões do GA
    • As versões de pré-visualização/RC notificam as atualizações do GA e as versões de pré-visualização
  • Desligar desativa a função de notificação de atualização
  • O LTS apenas notifica atualizações para lançamentos GA de manutenção a longo prazo (LTS)

Observação

A variável $Env:POWERSHELL_UPDATECHECK ambiente não existe até ser definida pela primeira vez.

Para definir a notificação de versão apenas para LTS lançamentos:

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Para definir a notificação de versão para o Default comportamento:

$Env:POWERSHELL_UPDATECHECK = 'Default'

Para mais informações Sobre Notificações de Atualização.

Novo suporte de recursos DSC com Invoke-DSCResource (Experimental)

Observação

Esta é uma funcionalidade experimental chamada PSDesiredStateConfiguration.InvokeDscResource. Para mais informações, consulte Utilização de Funcionalidades Experimentais.

O Invoke-DscResource cmdlet executa um método de um recurso PowerShell Desired State Configuration (DSC) especificado.

Este cmdlet invoca diretamente um recurso DSC, sem criar um documento de configuração. Usando este cmdlet, os produtos de gestão de configuração podem gerir Windows ou Linux utilizando recursos DSC. Este cmdlet também permite a depuração de recursos quando o motor DSC está a correr com a depuração ativada.

Este comando invoca o método Set de um recurso chamado WindowsProcess e fornece as propriedades obrigatórias Path e Arguments para iniciar o processo Windows especificado.

Invoke-DscResource -Name WindowsProcess -Method Set -ModuleName PSDesiredStateConfiguration -Property @{
  Path = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  Arguments = ''
}

Para mais informações sobre o Invoke-DSCResource.

Mudanças e Melhorias Recentes

Alterações Disruptivas

  • Tornar notificações de atualização suporte LTS e canais predefinidos (#11132)
  • Atualizar Test-Connection para funcionar mais como o do Windows PowerShell (#10697) (Obrigado @vexx32!)
  • Preservar dinheiro? para ParenExpression, SubExpression e ArrayExpression (#11040)
  • Definir diretório de trabalho para diretório atual em Start-Job (#10920) (Obrigado @iSazonov!)
  • Faça $PSCulture refletir consistentemente as mudanças culturais durante a sessão (#10138) (Obrigado @iSazonov!)

Atualizações e Correções do Motor

  • Melhorias nas APIs de breakpoint para cenários remotos (#11312)
  • Corrigir definição de classe PowerShell a vazar para outro espaço de execução (#11273)
  • Corrigir uma regressão na formatação causada pela primitiva FirstOrDefault adicionada em 7.0.0-Preview1 (#11258)
  • Módulos Microsoft Adicionais para acompanhar na Telemetria PS7 (#10751)
  • Tornar as funcionalidades aprovadas não experimentais (#11303)
  • Atualize o ConciseView para usar o TargetObject, se aplicável (#11075)
  • Corrigir NullReferenceException nos métodos públicos CompletionCompleters (#11274)
  • Verificação do estado do tópico de correção do apartamento em plataformas que não sejam Windows (#11301)
  • Atualizar a definição PSModulePath para concatenar as variáveis do processo e do ambiente da máquina (#11276)
  • Atualizar o .NET Core para a 3.1.0 (#11260)
  • Corrigir a deteção de $PSHOME à frente de $env:PATH (#11141)
  • Permitir que pwsh herde $env:PSModulePath e permitir que powershell.exe comece corretamente (#11057)
  • Mudança para .NET Core 3.1 preview 1 (#10798)
  • Verificações de etiquetas de refatoração de repare no fornecedor do sistema de ficheiros (#10431) (Obrigado @iSazonov!)
  • Substituir CR e nova linha por um carácter 0x23CE no registo de scripts (#10616)
  • Corrigir uma fuga de recursos desregistando o gestor de eventos do AppDomain.CurrentDomain.ProcessExit (#10626)
  • Adicione suporte ao ActionPreference.Break para quebrar o depurador quando são geradas mensagens de Debug, Erro, Informação, Progresso, Verbose ou Aviso (#8205) (Obrigado @KirkMunro!)
  • Ative os complementos do painel de controlo inicial dentro do PowerShell sem especificar .CPL extensão. (#9828)
  • Números negativos de suporte no operador -split (#8960) (Obrigado @ece-jacob-scott!)

Atualizações e Correções Gerais do Cmdlet

  • Correção para problema no Raspbian para definir a data das alterações ao ficheiro na Funcionalidade Experimental UnixStat (#11313)
  • Adicionar -AsPlainText ao ConvertFrom-SecureString (#11142)
  • Adicionada verificação de versões do WindowsPS para o WinCompat (#11148)
  • Corrigir o relatório de erros em alguns cenários WinCompat (#11259)
  • Adicionar resolver binário nativo (#11032) (Obrigado @iSazonov!)
  • Atualizar o cálculo da largura do carvão para respeitar corretamente os caracteres CJK (#11262)
  • Adicionar Unblock-File para macOS (#11137)
  • Corrigir regressão em Get-PSCallStack (#11210) (Obrigado @iSazonov!)
  • Remover o carregamento automático do módulo ScheduledJob ao usar comandos Job (#11194)
  • Adicionar o OutputType ao Get-Error cmdlet e preservar os nomes de tipo originais (#10856)
  • Corrigir a referência nula na propriedade SupportsVirtualTerminal (#11105)
  • Adicionar verificação de limite em Get-WinEvent (#10648) (Obrigado @iSazonov!)
  • Corrigir o tempo de execução do comando para que o StopUpstreamCommandsException não seja preenchido no -ErrorVariable (#10840)
  • Defina a codificação de saída para [Console]::OutputEncoding para comandos nativos (#10824)
  • Suportar blocos de código multi-linha em exemplos (#10776) (Obrigado @Greg-Smulko!)
  • Adicionar parâmetro de Cultura ao Select-String cmdlet (#10943) (Obrigado @iSazonov!)
  • Corrigir Start-Job caminho de diretório funcional com barra adicional (#11041)
  • ConvertFrom-Json: Desembrulhar coleções por defeito (#10861) (Obrigado @danstur!)
  • Use Hashtable sensível a maiúsculas minúsculas para Group-Object cmdlet com switches -CaseSensitive e -AsHashtable (#11030) (Obrigado @vexx32!)
  • Lidar com exceção se a enumeração de ficheiros falhar ao reconstruir o caminho para ter a carcaça correta (#11014)
  • Corrigir o ConciseView para mostrar Atividade em vez de myCommand (#11007)
  • Permitir que os comandos web ignorem os estados de erro HTTP (#10466) (Obrigado @vdamewood!)
  • Corrigir a tubulação de mais do que um CommandInfo para Get-Command (#10929)
  • Adicionar novamente Get-Counter cmdlet para Windows (#10933)
  • Faça ConvertTo-Json tratar [AutomationNull]::Value e [NullString]::Value como $null (#10957)
  • Remover parênteses do endereço ipv6 para remotos SSH (#10968)
  • Corrigir o crash se o comando enviado para pwsh for apenas espaço em branco (#10977)
  • Adicionados Get-Clipboard e Set-Clipboard cross-platform (#10340)
  • Corrigir a definição do caminho original do objeto do sistema de ficheiros para não ter barras adicionais (#10959)
  • $null de apoio para ConvertTo-Json (#10947)
  • Adicionar novamente Out-Printer comando no Windows (#10906)
  • Corrigir Start-Job -WorkingDirectory com espaços em branco (#10951)
  • Devolver valor predefinido ao obter nulo para uma configuração em PSConfiguration.cs (#10963) (Obrigado @iSazonov!)
  • Tratar a exceção de IO como não terminando (#10950)
  • Adicionar assembly GraphicalHost para ativar Out-GridView, Show-Command e Get-Help -ShowWindow (#10899)
  • Toma o ComputerName via pipeline em Get-HotFix (#10852) (Obrigado @kvprasoon!)
  • Corrigir a completação de aba para parâmetros para que mostrem parâmetros comuns como disponíveis (#10850)
  • Corrigir GetCorrectCasedPath() para primeiro verificar se alguma entrada de ficheiro de sistema é retornada antes de chamar First() (#10930)
  • Definir diretório de trabalho para diretório atual em Start-Job (#10920) (Obrigado @iSazonov!)
  • Alterar o TabExpansion2 para não exigir -CursorColumn e tratar como $InputScript.Length (#10849)
  • Tratar do caso onde o Host não pode devolver Linhas ou Colunas do ecrã (#10938)
  • Corrigir o uso de cores de destaque em hosts que não as suportam (#10937)
  • Adicionar novamente Update-List comando (#10922)
  • Atualizar ID FWLink para Clear-RecycleBin (#10925)
  • Durante a conclusão da tabulação, salta o ficheiro se não conseguires ler os atributos do ficheiro (#10910)
  • Adicionar Clear-RecycleBin novamente para Windows (#10909)
  • Adicionar $env:__SuppressAnsiEscapeSequences para controlar se deve ter sequência de escape VT na saída (#10814)
  • Adicionar -NoEmphasize parâmetro para colorizar Select-String saída (#8963) (Obrigado @derek-xia!)
  • Adicionar novamente Get-HotFix cmdlet (#10740)
  • Tornar Add-Type utilizável em aplicações que alojam PowerShell (#10587)
  • Use uma ordem de avaliação mais eficaz em LanguagePrimitives.IsNullLike() (#10781) (Obrigado @vexx32!)
  • Melhorar o tratamento de entradas por canal de coleção mista e dos fluxos de entrada em Format-Hex (#8674) (Obrigado @vexx32!)
  • Use a conversão de tipos nas tabelas de hash SSHConnection quando o valor não corresponde ao tipo esperado (#10720) (Obrigado @SeeminglyScience!)
  • Corrigir Get-Content -ReadCount comportamento de 0 quando -TotalCount está definido (#10749) (Obrigado @eugenesmlv!)
  • Mensagem de erro de reformulação de acesso negado em Get-WinEvent (#10639) (Obrigado @iSazonov!)
  • Ativar a completude de tabulação para atribuição de variáveis que estejam em enum ou tipo restrito (#10646)
  • Remover a propriedade remota SourceLength não utilizada que causa problemas de formatação (#10765)
  • Adicionar -Delimiter parâmetro à ConvertFrom-StringData (#10665) (Obrigado @steviecoaster!)
  • Adicionar parâmetro posicional para o ScriptBlock ao usar Invoke-Command com SSH (#10721) (Obrigado @machgo!)
  • Mostrar informação de contexto da linha se houver várias linhas, mas sem nome de script para o ConciseView (#10746)
  • Adicionar suporte para caminhos \wsl$\ ao fornecedor do sistema de ficheiros (#10674)
  • Adicionar o texto do token em falta para TokenKind.QuestionMark no parser (#10706)
  • Defina o diretório de trabalho atual de cada ForEach-Object -Parallel script em execução para a mesma localização do script que chama. (#10672)
  • Substituir api-ms-win-core-file-l1-2-2.dll por Kernell32.dll para as APIs FindFirstStreamW e FindNextStreamW (#10680) (Obrigado @iSazonov!)
  • Ajuda a ajustar o script de formatação para ser mais tolerante ao StrictMode (#10563)
  • Adicionar -SecurityDescriptorSDDL parâmetro à New-Service (#10483) (Obrigado @kvprasoon!)
  • Remover a saída informativa, consolidar o uso de ping em Test-Connection (#10478) (Obrigado @vexx32!)
  • Leia pontos especiais de reparação sem os aceder (#10662) (Obrigado @iSazonov!)
  • Saída Clear-Host direta para o terminal (#10681) (Obrigado @iSazonov!)
  • Adicionar novamente a nova linha para agrupar com Format-Table e -Property (#10653)
  • Remover [ValidateNotNullOrEmpty] de -InputObject em Get-Random para permitir uma cadeia vazia (#10644)
  • Tornar o algoritmo de distância de string do sistema de sugestões insensível a maiúsculas minúsculas (#10549) (Obrigado @iSazonov!)
  • Corrigir exceção de referência nula no processamento de entrada ForEach-Object -Parallel (#10577)
  • Adicionar definições de políticas de grupo PowerShell (#10468)
  • Atualize o host da consola para suportar sequências de controlo XTPUSHSGR/XTPOPSGR VT usadas em cenários de composabilidade. (#10208)
  • Adicionar o parâmetro WorkingDirectory à Start-Job (#10324) (Obrigado @davinci26!)
  • Remover o gestor de eventos que causava alterações de pontos de interrupção serem replicadas erroneamente para o depurador de espaço de execução do host (#10503) (Obrigado @KirkMunro!)
  • Substituir api-ms-win-core-job-12-1-0.dll por Kernell32.dll em Microsoft.PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Obrigado @iSazonov!)
  • Corrigir a saída errada para New-Service na atribuição de variáveis e -OutVariable (#10444) (Obrigado @kvprasoon!)
  • Corrigir problemas globais de ferramentas relacionados com código de saída, parâmetros de linha de comandos e caminho com espaços (#10461)
  • Corrigir a recursão no OneDrive - alterar o FindFirstFileEx() para usar o tipo SafeFindHandle (#10405)
  • Evite o carregamento automático do PSReadLine no Windows se o leitor de ecrã NVDA estiver ativo (#10385)
  • Aumentar as versões dos módulos built-with-PowerShell para 7.0.0.0 (#10356)
  • Adicionar um erro de lançamento em Add-Type se já existir um tipo com o mesmo nome (#9609) (Obrigado @iSazonov!)

Performance

  • Evite usar closure em Parser.SaveError (#11006)
  • Melhorar a cache ao criar novas instâncias Regex (#10657) (Obrigado @iSazonov!)
  • Melhorar o processamento dos dados de tipo incorporados do PowerShell a partir dos types.ps1xml, typesV3.ps1xml e GetEvent.types.ps1xml (#10898)
  • Atualize PSConfiguration.ReadValueFromFile para o tornar mais rápido e eficiente em memória (#10839)
  • Adicionar pequenas melhorias de desempenho para a inicialização do espaço de execução (#10569) (Obrigado @iSazonov!)
  • Tornar ForEach-Object mais rápido para os seus cenários mais comuns (#10454) e corrigir ForEach-Object -Parallel problema de desempenho com muitos espaços de execução (#10455)

Limpeza de código

  • Alterar o texto dos comentários e elementos para cumprir os padrões Microsoft (#11304)
  • Problemas com o estilo de limpeza no Compiler.cs (#10368) (Obrigado @iSazonov!)
  • Remover o conversor de tipos não utilizado para CommaDelimitedStringCollection (#11000) (Obrigado @iSazonov!)
  • Estilo de limpeza em InitialSessionState.cs (#10865) (Obrigado @iSazonov!)
  • Limpeza de código para a classe PSSession (#11001)
  • Remover a funcionalidade de 'executar Update-Help não funcional do Get-Help quando Get-Help executa pela primeira vez' (#10974)
  • Problemas de estilo de correção (#10998) (Obrigado @iSazonov!)
  • Limpeza: usar o tipo de pseudónimo incorporado (#10882) (Obrigado @iSazonov!)
  • Remover a chave de definição não utilizada ConsolePrompting e evitar a criação desnecessária de strings ao consultar a definição ExecutionPolicy (#10985)
  • Desativar a verificação de notificação de atualização para builds diárias (#10903) (Obrigado @bergmeister!)
  • Restabelecer API de depuração perdida em #10338 (#10808)
  • Remover a referência WorkflowJobSourceAdapter que já não é usada (#10326) (Obrigado @KirkMunro!)
  • Cleanup COM faz interfaces em código de lista de salto corrigindo atributos PreserveSig (#9899) (Obrigado @weltkante!)
  • Adiciona um comentário a explicar porque -ia não é o pseudónimo para -InformationAction parâmetro comum (#10703) (Obrigado @KirkMunro!)
  • Renomear InvokeCommandCmdlet.cs para InvokeExpressionCommand.cs (#10659) (Obrigado @kilasuit!)
  • Adicionar pequenas limpezas de código relacionadas com notificações de atualização (#10698)
  • Remover lógica de workflow obsoleta dos scripts de configuração remota (#10320) (Obrigado @KirkMunro!)
  • Atualizar o formato de ajuda para usar o caso correto (#10678) (Obrigado @tnieto88!)
  • Limpar os problemas ao estilo CodeFactor que estão a chegar nos commits no último mês (#10591) (Obrigado @iSazonov!)
  • Corrigir um erro tipográfico na descrição da funcionalidade experimental PSTernaryOperator (#10586) (Obrigado @bergmeister!)
  • Converter o ActionPreference.Suspend o valor da enumeração para um estado reservado e não suportado, e remove a restrição ao uso do ActionPreference.Ignore nas variáveis de preferência (#10317) (Obrigado @KirkMunro!)
  • Substitua o ArrayList por List<T> para obter código mais legível e fiável sem alterar funcionalidades (#10333) (Obrigado @iSazonov!)
  • Fazer correções no estilo de código do TestConnectionCommand (#10439) (Obrigado @vexx32!)
  • Limpar o AutomationEngine e remover chamada extra de método SetSessionStateDrive (#10416) (Obrigado @iSazonov!)
  • Renomear o ParameterSetName predefinido de volta para Delimiter para ConvertTo-Csv e ConvertFrom-Csv (#10425)

Tools

  • Adicionar a definição padrão para a propriedade SDKToUse para que se construa no VS (#11085)
  • Install-Powershell.ps1: Adicionar parâmetro para usar a instalação MSI (#10921) (Obrigado @MJECloud!)
  • Adicione exemplos básicos para install-powershell.ps1 (#10914) (Obrigado @kilasuit!)
  • Fazer Install-PowerShellRemoting.ps1 lidar com a string vazia no parâmetro PowerShellHome (#10526) (Obrigado @Orca88!)
  • Muda de /etc/lsb-release para /etc/os-release em install-powershell.sh (#10773) (Obrigado @Himura2la!)
  • Verifica pwsh.exe e pwsh na versão diária do Windows (#10738) (Obrigado @centreboard!)
  • Remover a torneira desnecessária no installpsh-osx.sh (#10752)
  • Atualizar install-powershell.ps1 para verificar a versão diária já instalada (#10489)

Testes

  • Deixe o teste DSC não fiável pendente (#11131)
  • Corrigir o teste de stringdata para validar corretamente as chaves das tabelas de hash (#10810)
  • Descarregar módulos de teste (#11061) (Obrigado @iSazonov!)
  • Aumentar o tempo entre tentativas do URL de teste (#11015)
  • Atualize os testes para descrever com precisão as ações de teste. (#10928) (Obrigado @romero126!)
  • Saltar temporariamente o teste instável TestAppDomainProcessExitEvenHandlerNotLeaking (#10827)
  • Torne o teste de fugas do gestor de eventos estável (#10790)
  • Sincronização em maiúsculas no CI YAML (#10767) (Obrigado @RDIL!)
  • Adicionar teste para a correção de fugas do gestor de eventos (#10768)
  • Adicionar Get-ChildItem teste (#10507) (Obrigado @iSazonov!)
  • Substituir linguagem ambígua para testes de mudar para parâmetro para precisão (#10666) (Obrigado @romero126!)
  • Adicionar verificação experimental aos testes de ForEach-Object -Parallel (#10354) (Obrigado @KirkMunro!)
  • Testes de atualização para validação Alpine (#10428)

Melhorias na Construção e Pacotes

  • Corrigir a assinatura de pacotes Nuget para build de Pacotes Coordenados (#11316)
  • Atualizar dependências do PowerShell Gallery e do NuGet (#11323)
  • Avançar o Microsoft.ApplicationInsights da versão 2.11.0 para a 2.12.0 (#11305)
  • Avançar o Microsoft.CodeAnalysis.CSharp da versão 3.3.1 para a 3.4.0 (#11265)
  • Pacotes de atualizações para Debian 10 e 11 (#11236)
  • Só permitir funcionalidades experimentais antes do RC (#11162)
  • Atualização da versão mínima do macOS (#11163)
  • Aumentar o NJsonSchema de 10.0.27 para 10.0.28 (#11170)
  • Atualização de links em README.md e metadata.json para o Preview.5 (#10854)
  • Selecione os ficheiros para testes de conformidade que pertencem ao PowerShell (#10837)
  • Permitir que o pacote msix do win7x86 seja construído. (Interno 10515)
  • Permitir que versões semânticas sejam passadas para a função NormalizeVersion (#11087)
  • Aumentar o .NET core framework para 3.1-preview.3 (#11079)
  • Aumentar o PSReadLine da 2.0.0-beta5 para a 2.0.0-beta6 em /src/Modules (#11078)
  • Aumentar Newtonsoft.Json de 12.0.2 para 12.0.3 (#11037) (#11038)
  • Adicionar os pacotes Debian 10, 11 e CentOS 8 (#11028)
  • Carregar Build-Info ficheiro Json com o campo ReleaseDate (#10986)
  • Aumentar o .NET core framework para 3.1-preview.2 (#10993)
  • Ativar a compilação do pacote x86 MSIX (#10934)
  • Atualizar a URL do script de instalação do SDK dotnet em build.psm1 (#10927)
  • Bump Markdig. Assinado de 0.17.1 para 0.18.0 (#10887)
  • Aumentar o ThreadJob da 2.0.1 para a 2.0.2 (#10886)
  • Atualizar o módulo de Manifestos e Embalagens do AppX para cumprir os requisitos da MS Store (#10878)
  • Atualizar a referência do pacote do PowerShell SDK para preview.5 (Interno 10295)
  • Atualização ThirdPartyNotices.txt (#10834)
  • Transferir Microsoft.PowerShell.Native para 7.0.0-preview.3 (#10826)
  • Avançar o Microsoft.ApplicationInsights de 2.10.0 para 2.11.0 (#10608)
  • Mudar o NJsonSchema de 10.0.24 para 10.0.27 (#10756)
  • Adicionar suporte para MacPorts ao sistema de compilação (#10736) (Obrigado @Lucius-Q-User!)
  • Atualizar o PackageManagement da versão 1.4.4 para a 1.4.5 (#10728)
  • Transferir o NJsonSchema de 10.0.23 para 10.0.24 (#10635)
  • Adicionar variável de ambiente para diferenciar a telemetria cliente/servidor no MSI (#10612)
  • Alterar PSDesiredStateConfiguration de 2.0.3 para 2.0.4 (#10603)
  • Avançar o Microsoft.CodeAnalysis.CSharp da versão 3.2.1 para a 3.3.1 (#10607)
  • Atualização para o .Net Core 3.0 RTM (#10604) (Obrigado @bergmeister!)
  • Atualizar a embalagem do MSIX para que a versão cumpra os requisitos da Windows Store (#10588)
  • Aumenta a versão PowerShellGet da 2.2 para a 2.2.1 (#10382)
  • Transferir a versão do PackageManagement da 1.4.3 para a 1.4.4 (#10383)
  • Atualização README.md e metadata.json para 7.0.0-preview.4 (Interno 10011)
  • Atualizar a versão do .Net Core 3.0 do Preview 9 para o RC1 (#10552) (Obrigado @bergmeister!)
  • Geração de listas de Funcionalidades Experimentais Fixar (Internal 9996)
  • Aumentar a versão PSReadLine da 2.0.0-beta4 para a 2.0.0-beta5 (#10536)
  • Corrigir o script de build release para definir a tag release
  • Atualização da versão do Microsoft.PowerShell.Native para 7.0.0-preview.2 (#10519)
  • Atualizar para Netcoreapp3.0 preview9 (#10484) (Obrigado @bergmeister!)
  • Certifica-te de que a build coordenada diária sabe que é uma build diária (#10464)
  • Atualizar a compilação combinada do pacote para lançar as compilações diárias (#10449)
  • Remover referência de appveyor (#10445) (Obrigado @RDIL!)
  • Mudar a versão do NJsonSchema de 10.0.22 para 10.0.23 (#10421)
  • Remover a eliminação da pasta de build linux-x64 porque algumas dependências do Alpine precisam dela (#10407)

Documentação e Conteúdo de Ajuda

  • Refatorar registos de alterações para um registo por lançamento (#11165)
  • Corrigir FWLinks para documentos de ajuda online do PowerShell 7 (#11071)
  • Atualização CONTRIBUTING.md (#11096) (Obrigado @mklement0!)
  • Links para o documento de instalação de correcção no README.md (#11083)
  • Adiciona exemplos ao install-powershell.ps1 script (#11024) (Obrigado @kilasuit!)
  • Corrigir Select-String ênfase e Import-DscResource em CHANGELOG.md (#10890)
  • Remover o link obsoleto do powershell-beginners-guide.md (#10926)
  • Registos de alterações de estabilidade e manutenção de fusão (#10527)
  • Atualização usada na versão .NET na documentação de compilação (#10775) (Obrigado @Greg-Smulko!)
  • Substituir os links do MSDN para o Microsoft Learn no powershell-beginners-guide.md (#10778) (Obrigado @iSazonov!)
  • Link para corrigir a visão geral do DSC avariado (#10702)
  • Atualizar Support_Question.md para ligar ao Stack Overflow como outro recurso da comunidade (#10638) (Obrigado @mklement0!)
  • Adicionar arquitetura de processador ao modelo de pedido de distribuição (#10661)
  • Adicionar novo livro de MoL do PowerShell à aprendizagem da documentação PowerShell (#10602)
  • Atualização README.md e metadados para as versões v6.1.6 e v6.2.3 (#10523)
  • Corrigir um erro tipográfico em README.md (#10465) (Obrigado @vedhasp!)
  • Adicionar uma referência ao módulo PSKoans na documentação de Recursos de Aprendizagem (#10369) (Obrigado @vexx32!)
  • Atualização README.md e metadata.json para 7.0.0-preview.3 (#10393)