Novidades no PowerShell 7.1
Em 11 de novembro de 2020, anunciamos a disponibilidade geral do PowerShell 7.1. Aproveitando a base estabelecida no PowerShell 7.0, nossos esforços se concentram nos problemas da comunidade e incluem vários aprimoramentos e correções. Estamos comprometidos em garantir que o PowerShell continue sendo uma plataforma estável e de alto desempenho.
O PowerShell 7.1 inclui os recursos, as atualizações e as alterações interruptivas a seguir.
- PSReadLine 2.1.0, que inclui o Predictive IntelliSense
- O PowerShell 7.1 foi publicado na Microsoft Store
- Pacotes do instalador atualizados para novas versões do sistema operacional compatíveis com ARM64
- Quatro novos recursos experimentais e dois recursos experimentais promovidos para o básico
- Várias alterações interruptivas para melhorar a usabilidade
Para ver uma lista completa das alterações, confira o LOG DE MUDANÇAS no repositório do GitHub.
PSReadLine 2.1.0
O PowerShell 7.1 também inclui PSReadLine 2.1.0. Essa versão inclui o Predictive IntelliSense. Para obter mais informações sobre o recurso Predictive IntelliSense, confira oanúncio no blog do PowerShell.
Pacote do instalador da Microsoft Store
O PowerShell 7.1 foi publicado na Microsoft Store. Você pode encontrar a versão do PowerShell no site da Microsoft Store ou no aplicativo da Store no Windows.
Benefícios do pacote da Microsoft Store:
- Atualizações automáticas integradas diretamente no Windows
- Integra-se a outros mecanismos de distribuição de software, como Intune e SCCM
Observação
Nenhuma definição de configuração no nível do sistema armazenada em $PSHOME
pode ser modificada. Isso inclui a configuração do WSMAN. Isso impede que as sessões remotas se conectem a instalações baseadas na Store do PowerShell. Há suporte para configurações no nível do usuário e para comunicação remota SSH.
Outros instaladores
Para obter informações mais atualizadas sobre os sistemas operacionais com suporte e o ciclo de vida de suporte, confira o Ciclo de vida de suporte do PowerShell.
Confira as instruções de instalação do seu sistema operacional preferido:
Além disso, o PowerShell 7.1 dá suporte às variantes ARM32 e ARM64 do Debian, Ubuntu e ARM64 Alpine Linux.
Embora não tenha suporte oficial, a comunidade também forneceu pacotes para o Arch e o Kali Linux.
Observação
Atualmente, o Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine e Arm não dão suporte à comunicação remota do WinRM. Para obter detalhes sobre como configurar a comunicação remota baseada em SSH, confira Comunicação remota do PowerShell por SSH.
Recursos experimentais
Para obter mais informações sobre os recursos experimentais, confira Usar recursos experimentais.
Estes recursos experimentais agora são recursos básicos nesta versão:
Estes recursos experimentais foram adicionados a esta versão:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- O PowerShell 7.1 estende este recurso experimental para adicionar o parâmetro Runspace a todos os cmdlets
*-PSBreakpoint
. O parâmetro Runspace especifica um objeto Runspace para interagir com pontos de interrupção no runspace especificado.
- O PowerShell 7.1 estende este recurso experimental para adicionar o parâmetro Runspace a todos os cmdlets
PSNativePSPathResolution – Permite passar caminhos do provedor do PowerShell para comandos nativos incompatíveis com a sintaxe de caminho do PowerShell.
PSCultureInvariantReplaceOperator – Quando o operando à esquerda em uma instrução do operador
-replace
não for uma cadeia de caracteres, esse operando será convertido em uma cadeia de caracteres. Com o recurso habilitado, as configurações de cultura não são usadas na conversão em cadeia de caracteres.PSSubsystemPluginModel – Estabelece a base para dar suporte a futuros plug-ins do Predictive IntelliSense.
Alterações de falha e melhorias
Comportamento de comparação de string alterado no .NET 5.0
O PowerShell 7.1 tem como base o .NET 5.0, que introduziu a seguinte alteração importante:
A partir do .NET 5.0, as comparações de cadeia de caracteres invariáveis de cultura ignoram caracteres de controle não imprimíveis.
Por exemplo, as duas strings a seguir são consideradas idênticas:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
Corrigir
$?
para não ser$false
quando o comando nativo for gravado emstderr
(nº 13395)É comum que comandos nativos gravem em
stderr
sem a intenção de indicar uma falha. Com essa alteração,$?
será definido como$false
somente quando o comando nativo também tiver um código de saída diferente de zero. Essa alteração não tem relação com o recurso experimentalPSNotApplyErrorActionToStderr
.Fazer
$ErrorActionPreference
não afetar a saídastderr
de comandos nativos (nº 13361)É comum que comandos nativos gravem em
stderr
sem a intenção de indicar uma falha. Com essa alteração, a saídastderr
ainda será capturada em objetos ErrorRecord, mas o runtime não aplicará$ErrorActionPreference
se o ErrorRecord vier de um comando nativo.Renomeie
-FromUnixTime
como ativado-UnixTimeSeconds
Get-Date
para permitir a entrada de tempo do Unix (#13084) (Obrigado, @aetos382!)O parâmetro
-FromUnixTime
foi adicionado durante a 7.1 – versão prévia 2. O parâmetro foi renomeado para corresponder melhor ao tipo de dados. Esse parâmetro usa um valor inteiro que representa em segundos desde 1º de janeiro de 1970, 0:00:00.Esse exemplo converte o horário do 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 especificado explicitamente substitua o mesmo no nivelamento de tabela de hash (nº 13162)
Com essa alteração, os parâmetros nomeados do nivelamento são movidos para o final da lista de parâmetros. Dessa maneira, eles ficam associados após todos os parâmetros nomeados especificados serem explicitamente associados. A associação de parâmetros para funções simples não gera erros quando um parâmetro nomeado especificado não pode ser encontrado. Parâmetros nomeados desconhecidos são associados ao parâmetro
$args
da função simples. Mover o nivelamento para o final 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, MyPath não está associado a
-Path
porque está em terceiro na lista de argumentos. ## Por isso, é colocado em '$args' junto comBlah = "World"
.PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Com essa alteração, os argumentos de
@hash
são movidos para o final da lista de argumentos. MyPath se torna o primeiro argumento na lista, portanto, associado a-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
Tornar o parâmetro
-Qualifier
switch não posicional paraSplit-Path
(#12960) (Obrigado, @yecril71pl!)Resolver o diretório de trabalho como caminho literal para
Start-Process
quando ele não for especificado (nº 11946) (Obrigado, @NoMoreFood!)Criar
-OutFile
parâmetro em cmdlets da Web para funcionar como-LiteralPath
(#11701) (Obrigado, @iSazonov!)Corrigir a associação de parâmetro de cadeia de caracteres para
BigInteger
literais numéricos (#11634) (Obrigado, @vexx32!)No Windows,
Start-Process
cria um ambiente de processo com todas as variáveis de ambiente da sessão atual, usando-UseNewEnvironment
cria um novo ambiente de processo padrão (#10830) (Obrigado, @iSazonov!)Não encapsular o resultado de retorno para
PSObject
ao converterScriptBlock
para um delegado (nº 10619)Quando um
ScriptBlock
é convertido em um tipo delegado a ser usado no contexto de C#, encapsulando o resultado em umPSObject
, gera problemas desnecessários:- Quando o valor é convertido no tipo de retorno delegado, o
PSObject
é essencialmente desencapsulado. Portanto, oPSObject
é desnecessário. - Quando o tipo de retorno delegado é
object
, é encapsulado em umPSObject
, tornando difícil trabalhar com ele em código C#.
Após essa alteração, o objeto retornado será o objeto subjacente.
- Quando o valor é convertido no tipo de retorno delegado, o