O que há de novo no PowerShell 7.1

Em 11 de novembro de 2020 anunciamos a disponibilidade geral do PowerShell 7.1. Com base na fundação estabelecida no PowerShell 7.0, os nossos esforços focaram-se nas questões da comunidade e incluem uma série de melhorias e correções. Estamos empenhados em garantir que a PowerShell continue a ser uma plataforma estável e performante.

O PowerShell 7.1 inclui as seguintes funcionalidades, atualizações e alterações de rutura.

  • PSReadLine 2.1.0, que inclui Predictive IntelliSense
  • PowerShell 7.1 foi publicado na Microsoft Store
  • Pacotes instaladores atualizados para novas versões DE com suporte para ARM64
  • 4 novas funcionalidades experimentais e 2 funcionalidades experimentais promovidas ao mainstream
  • Várias mudanças de rutura para melhorar a usabilidade

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

PSReadLine 2.1.0

PowerShell 7.1 também inclui PSReadLine 2.1.0. Esta versão inclui o Predictive IntelliSense. Para mais informações sobre a funcionalidade Predictive IntelliSense, consulte o anúncio no blog PowerShell.

Pacote de instalador microsoft Store

PowerShell 7.1 foi publicado na Microsoft Store. Pode encontrar a versão PowerShell no website da Microsoft Store ou na aplicação Store no Windows.

Benefícios do pacote Microsoft Store:

  • Atualizações automáticas incorporadas no Windows
  • Integra-se com outros mecanismos de distribuição de software como Intune e SCCM

Nota

As definições de configuração ao nível do sistema armazenadas $PSHOME não podem ser modificadas. Isto inclui a configuração WSMAN. Isto impede que se ligam a instalações baseadas na Loja de PowerShell. As configurações ao nível do utilizador e a remoting SSH são suportadas.

Outros instaladores

Para obter informações mais atualizadas sobre sistemas operativos suportados e utilizar o ciclo de vida, consulte o ciclo de vida de suporte powerShell.

Consulte as instruções de instalação do seu sistema operativo preferido:

Adicionalmente, o PowerShell 7.1 suporta os sabores ARM32 e ARM64 de Debian, Ubuntu e ARM64 Alpine Linux.

Apesar de não ter sido oficialmente apoiada, a comunidade também forneceu pacotes para Arch e Kali Linux.

Nota

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine e Arm atualmente não suportam a remoting WinRM. Para obter detalhes sobre a configuração da remoting baseada em SSH, consulte PowerShell Remoting sobre SSH.

Características experimentais

Para obter mais informações sobre as Funcionalidades Experimentais, consulte utilização de funcionalidades experimentais.

As seguintes características experimentais são agora características principais nesta versão:

Foram adicionadas nesta versão as seguintes características experimentais:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 estende esta característica experimental para adicionar o parâmetro Runspace a todos os *-PSBreakpoint cmdlets. O parâmetro Runspace especifica um objeto Runspace para interagir com pontos de rutura no espaço de funcionamento especificado.
  • PSNativePSPathResolution - Esta funcionalidade permite-lhe passar caminhos do fornecedor PowerShell para comandos nativos que não suportam a sintaxe do caminho powerShell.

  • PSCultureInvariantReplaceOperator - Quando a ópera à esquerda numa -replace declaração do operador não é uma corda, essa ópera é convertida em uma corda. Com a funcionalidade ativada, a conversão não utiliza as definições culturais para conversão de cordas.

  • PSSubsystemPluginModel estabelece as bases para apoiar futuros plug-ins Predictive IntelliSense.

Quebrando alterações e melhorias

  • Comportamento de comparação de cordas alterado em .NET 5.0

    PowerShell 7.1 é construído em .NET 5.0, que introduziu a seguinte mudança de rutura:

    A partir de .NET 5.0, as comparações de cordas invariantes da cultura ignoram caracteres de controlo de não impressão.

    Por exemplo, as duas cordas seguintes são consideradas idênticas:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Fix $? to not be $false when native command to stderr (#13395)

    É comum que os comandos nativos escrevam stderr sem pretender indicar uma falha. Com esta alteração $? é definido $false apenas quando o comando nativo também tem um código de saída não-zero. Esta alteração não está relacionada com a característica PSNotApplyErrorActionToStderrexperimental.

  • Não $ErrorActionPreference afete a stderr saída de comandos nativos (#13361)

    É comum que os comandos nativos escrevam stderr sem pretender indicar uma falha. Com esta alteração, stderr a saída ainda é capturada em objetos ErrorRecord , mas o tempo de execução já não se aplica $ErrorActionPreference se o ErrorRecord vier de um comando nativo.

  • Renomeado -FromUnixTime para -UnixTimeSeconds permitir entrada de Get-Date tempo Unix (#13084) (Obrigado @aetos382!)

    O -FromUnixTime parâmetro foi adicionado durante 7.1-pré-visualização.2. O parâmetro foi renomeado para melhor corresponder ao tipo de dados. Este parâmetro tem um valor inteiro que representa em segundos desde 1 de janeiro de 1970, 0:00:00.

    Este exemplo converte um tempo Unix (representado pelo número de segundos desde 1970-01-01 0:00:00) para DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Permitir que o parâmetro nomeado explicitamente especificado substitui o mesmo de salpicos de hashtable (#13162)

    Com esta alteração, os parâmetros nomeados de splatting são movidos para o fim da lista de parâmetros de modo que eles são ligados depois de todos os parâmetros nomeados explicitamente especificados estarem ligados. A ligação de parâmetros para funções simples não lança um erro quando um parâmetro especificado não pode ser encontrado. Os parâmetros nomeados desconhecidos estão ligados ao $args parâmetro da função simples. Mover a splatting para o fim da lista de argumentos altera a ordem em que os parâmetros aparecem em $args.

    Por exemplo:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    No comportamento anterior, o MyPath não está obrigado a fazê-lo -Path porque é o terceiro argumento na lista de argumentos. Então acaba por ser recheado em '$args' juntamente com Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    Com esta mudança, os argumentos são transferidos @hash para o fim da lista de argumentos. MyPath torna-se o primeiro argumento da lista, por isso é obrigado a -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Faça com que o parâmetro -Qualifier do interruptor não se posicione para Split-Path (#12960) (Obrigado @yecril71pl!)

  • Resolva o diretório de trabalho como caminho literal para Start-Process quando não for especificado (#11946) (Obrigado @NoMoreFood!)

  • Faça -OutFile um parâmetro em cmdlets web para funcionar como -LiteralPath (#11701) (Obrigado @iSazonov!)

  • Fixação de parâmetros de corda para BigInteger literalidades numéricas (#11634) (Obrigado @vexx32!)

  • No Windows, Start-Process cria um ambiente de processo com todas as variáveis ambientais da sessão atual, usando -UseNewEnvironment cria um novo ambiente de processo padrão (#10830) (Obrigado @iSazonov!)

  • Não embrulhe o resultado da devolução ao PSObject converter um ScriptBlock para um delegado (#10619)

    Quando a ScriptBlock é convertida para um tipo delegado a ser usado no contexto C#, embrulhar o resultado num PSObject traz problemas não necessários:

    • Quando o valor é convertido para o tipo de devolução de delegado, o PSObject essencialmente é desembrulhado. Então o PSObject é desprosudido.
    • Quando o tipo de devolução de delegado é object, ele é embrulhado em um PSObject difícil de trabalhar com o código C#.

    Após esta alteração, o objeto devolvido é o objeto subjacente.