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.
- PowerShell 7.1 estende esta característica experimental para adicionar o parâmetro Runspace a todos os
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 tostderr
(#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ísticaPSNotApplyErrorActionToStderr
experimental.Não
$ErrorActionPreference
afete astderr
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 deGet-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 comBlah = "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 paraSplit-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 umScriptBlock
para um delegado (#10619)Quando a
ScriptBlock
é convertida para um tipo delegado a ser usado no contexto C#, embrulhar o resultado numPSObject
traz problemas não necessários:- Quando o valor é convertido para o tipo de devolução de delegado, o
PSObject
essencialmente é desembrulhado. Então oPSObject
é desprosudido. - Quando o tipo de devolução de delegado é
object
, ele é embrulhado em umPSObject
difícil de trabalhar com o código C#.
Após esta alteração, o objeto devolvido é o objeto subjacente.
- Quando o valor é convertido para o tipo de devolução de delegado, o