Migrating from Windows PowerShell 5.1 to PowerShell 7 (Migrar do Windows PowerShell 5.1 para o PowerShell 7)

Projetado para ambientes de nuvem, locais e híbridos, o PowerShell 7 está repleto de aprimoramentos e novos recursos.

  • Instala e executa lado a lado com o Windows PowerShell
  • Compatibilidade aprimorada com módulos existentes do Windows PowerShell
  • Novos recursos linguísticos, como operadores ternários e ForEach-Object -Parallel
  • Desempenho melhorado
  • Comunicação remota baseada em SSH
  • Interoperabilidade entre plataformas
  • Suporte para contêineres Docker

O PowerShell 7 funciona lado a lado com o Windows PowerShell, permitindo que você teste e compare facilmente entre edições antes da implantação. A migração é simples, rápida e segura.

O PowerShell 7 é suportado nos seguintes sistemas operacionais Windows:

  • Windows 10 e 11
  • Windows Server 2016, 2019 e 2022

O PowerShell 7 também é executado no macOS e em várias distribuições Linux. Para obter uma lista de sistemas operacionais suportados e informações sobre o ciclo de vida do suporte, consulte o Ciclo de Vida de Suporte do PowerShell.

Instalando o PowerShell 7

Para flexibilidade e suporte às necessidades de TI, engenheiros de DevOps e desenvolvedores, há várias opções disponíveis para instalar o PowerShell 7. Na maioria dos casos, as opções de instalação podem ser reduzidas aos seguintes métodos:

Nota

O pacote MSI pode ser implantado e atualizado com produtos de gerenciamento, como o Microsoft Configuration Manager. Baixe os pacotes da página de versão do GitHub.

A implantação do pacote MSI requer permissão de administrador. O pacote ZIP pode ser implantado por qualquer usuário. O pacote ZIP é a maneira mais fácil de instalar o PowerShell 7 para teste, antes de se comprometer com uma instalação completa.

Você também pode instalar o PowerShell 7 por meio da Windows Store ou wingetdo . Para obter mais informações sobre esses dois métodos, consulte as instruções detalhadas em Instalando o PowerShell no Windows.

Usando o PowerShell 7 lado a lado com o Windows PowerShell 5.1

O PowerShell 7 foi projetado para coexistir com o Windows PowerShell 5.1. Os recursos a seguir garantem que seu investimento no PowerShell esteja protegido e que sua migração para o PowerShell 7 seja simples.

  • Caminho de instalação separado e nome do executável
  • PSModulePath separado
  • Perfis separados para cada versão
  • Compatibilidade melhorada dos módulos
  • Novos pontos finais de comunicação remota
  • Suporte à política de grupo
  • Logs de eventos separados

Diferenças nas versões do .NET

O PowerShell 7.2 é baseado no .NET 6.0. O Windows PowerShell 5.1 é baseado no .NET Framework 4.x. As diferenças entre as versões do .NET podem afetar o comportamento de seus scripts, especialmente se você estiver chamando o método .NET diretamente. Para obter mais informações, Diferenças entre o Windows PowerShell 5.1 e o PowerShell 7.x.

Caminho de instalação separado e nome do executável

O PowerShell 7 é instalado em um novo diretório, permitindo a execução lado a lado com o Windows PowerShell 5.1.

Locais de instalação por versão:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7

O novo local é adicionado ao seu PATH permitindo que você execute o Windows PowerShell 5.1 e o PowerShell 7. Se você estiver migrando do PowerShell 6.x para o PowerShell 7, o PowerShell 6 será removido e o PATH substituído.

No Windows PowerShell, o executável do PowerShell é chamado powershell.exe. Na versão 6 e superior, o executável é nomeado pwsh.exe. O novo nome facilita o suporte à execução lado a lado de ambas as versões.

PSModulePath separado

Por padrão, o Windows PowerShell e o PowerShell 7 armazenam módulos em locais diferentes. O PowerShell 7 combina esses locais na variável de $Env:PSModulePath ambiente. Ao importar um módulo pelo nome, o PowerShell verifica o local especificado pelo $Env:PSModulePath. Isso permite que o PowerShell 7 carregue os módulos Core e Desktop.

Escopo de instalação Windows PowerShell 5.1 PowerShell 7.0
Módulos do PowerShell $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules
Instalado pelo utilizador
Âmbito de aplicação de todos os utilizadores
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Instalado pelo utilizador
Escopo CurrentUser
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

Os exemplos a seguir mostram os valores padrão de $Env:PSModulePath para cada versão.

  • Para o Windows PowerShell 5.1:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • Para o PowerShell 7:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

Observe que o PowerShell 7 inclui os caminhos do Windows PowerShell e os caminhos do PowerShell 7 para fornecer carregamento automático de módulos.

Nota

Caminhos adicionais podem existir se você tiver alterado a variável de ambiente PSModulePath ou instalado módulos ou aplicativos personalizados.

Para obter mais informações, consulte about_PSModulePath.

Para obter mais informações sobre módulos, consulte about_Modules.

Perfis separados

Um perfil do PowerShell é um script que é executado quando o PowerShell é iniciado. Esse script personaliza seu ambiente adicionando comandos, aliases, funções, variáveis, módulos e unidades do PowerShell. O script de perfil disponibiliza essas personalizações em todas as sessões sem precisar recriá-las manualmente.

O caminho para o local do perfil foi alterado no PowerShell 7.

  • No Windows PowerShell 5.1, o local do perfil é $HOME\Documents\WindowsPowerShell.
  • No PowerShell 7, o local do perfil é $HOME\Documents\PowerShell.

Os nomes dos arquivos de perfil também foram alterados:

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

Para mais informações about_Profiles.

Compatibilidade do PowerShell 7 com módulos do Windows PowerShell 5.1

A maioria dos módulos usados no Windows PowerShell 5.1 já funciona com o PowerShell 7, incluindo o Azure PowerShell e o Ative Directory. Continuamos a trabalhar com outras equipes para adicionar suporte nativo ao PowerShell 7 para mais módulos, incluindo Microsoft Graph, Office 365 e outros. Para obter a lista atual de módulos suportados, consulte Compatibilidade de módulos do PowerShell 7.

Nota

No Windows, também adicionamos uma opção UseWindowsPowerShell para Import-Module facilitar a transição para o PowerShell 7 para aqueles que usam módulos incompatíveis. Para obter mais informações sobre essa funcionalidade, consulte about_Windows_PowerShell_Compatibility.

Comunicação Remota de Powershell

A comunicação remota do PowerShell permite executar qualquer comando do PowerShell em um ou mais computadores remotos. Você pode estabelecer conexões persistentes, iniciar sessões interativas e executar scripts em computadores remotos.

Comunicação remota WS-Management

O Windows PowerShell 5.1 e versões posteriores usam o protocolo WS-Management (WSMAN) para negociação de conexão e transporte de dados. O Gerenciamento Remoto do Windows (WinRM) usa o protocolo WSMAN. Se o WinRM tiver sido habilitado, o PowerShell 7 usará o ponto de extremidade existente do Windows PowerShell 5.1 nomeado Microsoft.PowerShell para conexões remotas. Para atualizar o PowerShell 7 para incluir seu próprio ponto de extremidade, execute o Enable-PSRemoting cmdlet. Para obter informações sobre como se conectar a pontos de extremidade específicos, consulte WS-Management Remoting in PowerShell

Para usar a comunicação remota do Windows PowerShell, o computador remoto deve ser configurado para gerenciamento remoto. Para obter mais informações, incluindo instruções, consulte Sobre requisitos remotos.

Para obter mais informações sobre como trabalhar com comunicação remota, consulte Sobre o Remote

Comunicação remota baseada em SSH

A comunicação remota baseada em SSH foi adicionada no PowerShell 6.x para oferecer suporte a outros sistemas operacionais que não podem usar componentes nativos do Windows, como o WinRM. A comunicação remota SSH cria um processo de host do PowerShell no computador de destino como um subsistema SSH. Para obter detalhes e exemplos sobre como configurar a comunicação remota baseada em SSH no Windows ou Linux, consulte: Comunicação remota do PowerShell sobre SSH.

Nota

A Galeria do PowerShell (PSGallery) contém um módulo e cmdlet que configura automaticamente a comunicação remota baseada em SSH. Instale o Microsoft.PowerShell.RemotingTools módulo do PSGallery e execute o Enable-SSH cmdlet.

Os New-PSSessioncmdlets , Enter-PSSessione têm Invoke-Command novos conjuntos de parâmetros para oferecer suporte a conexões SSH.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Para criar uma sessão remota, especifique o computador de destino com o parâmetro HostName e forneça o nome de usuário com UserName. Ao executar os cmdlets interativamente, será solicitada uma senha.

Enter-PSSession -HostName <Computer> -UserName <Username>

Como alternativa, ao usar o parâmetro HostName , forneça as informações do nome de usuário seguidas pelo sinal de arroba (@), seguido pelo nome do computador.

Enter-PSSession -HostName <Username>@<Computer>

Você pode configurar a autenticação de chave SSH usando um arquivo de chave privada com o parâmetro KeyFilePath . Para obter mais informações, consulte Gerenciamento de chaves OpenSSH.

Política de Grupo suportada

O PowerShell inclui configurações de Política de Grupo para ajudá-lo a definir valores de opção consistentes para servidores em um ambiente corporativo. Estas definições incluem:

  • Configuração da sessão de console: define um ponto de extremidade de configuração no qual o PowerShell é executado.
  • Ativar Registro em Log de Módulos: define a propriedade LogPipelineExecutionDetails dos módulos.
  • Ativar o Log de Blocos de Scripts do PowerShell: habilita o registro detalhado de todos os scripts do PowerShell.
  • Ativar Execução de Script: define a política de execução do PowerShell.
  • Ativar a transcrição do PowerShell: permite capturar a entrada e a saída de comandos do PowerShell em transcrições baseadas em texto.
  • Defina o caminho de origem padrão para Update-Help: define a fonte da Ajuda atualizável como um diretório, não para a Internet.

Para obter mais informações, veja about_Group_Policy_Settings.

O PowerShell 7 inclui modelos de Política de Grupo e um script de instalação no $PSHOME.

As ferramentas de Política de Grupo usam arquivos de modelo administrativo (.admx, .adml) para preencher as configurações de diretiva na interface do usuário. Isso permite que os administradores gerenciem configurações de diretiva baseadas no Registro. O InstallPSCorePolicyDefinitions.ps1 script instala os Modelos Administrativos do PowerShell na máquina local.

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

Logs de eventos separados

O Windows PowerShell e o PowerShell 7 registram eventos para separar logs de eventos. Use o comando a seguir para obter uma lista dos logs do PowerShell.

Get-WinEvent -ListLog *PowerShell*

Para obter mais informações, consulte about_Logging_Windows.

Experiência de edição aprimorada com o Visual Studio Code

O Visual Studio Code (VSCode) com a Extensão PowerShell é o ambiente de script com suporte para o PowerShell 7. O ISE (Ambiente de Script Integrado) do Windows PowerShell oferece suporte apenas ao Windows PowerShell.

A extensão atualizada do PowerShell inclui:

  • Novo modo de compatibilidade ISE
  • PSReadLine na consola integrada, incluindo realce de sintaxe, edição de várias linhas e pesquisa retroativa
  • Melhorias de estabilidade e desempenho
  • Nova integração com CodeLens
  • Preenchimento automático de caminho melhorado

Para facilitar a transição para o Visual Studio Code, use a função Habilitar modo ISE disponível na Paleta de comandos. Esta função alterna o VSCode em um layout de estilo ISE. O layout no estilo ISE oferece todos os novos recursos e capacidades do PowerShell em uma experiência de usuário familiar.

Para alternar para o novo layout ISE, pressione Ctrl+Shift+P para abrir a Paleta de Comandos, digite PowerShell e selecione PowerShell: Ativar Modo ISE.

Para definir o layout para o layout original, abra a Paleta de Comandos, selecione PowerShell: Desabilitar Modo ISE (restaurar para padrões).

Para obter detalhes sobre como personalizar o layout do VSCode para ISE, consulte Como replicar a experiência ISE no Visual Studio Code

Nota

Não há planos para atualizar o ISE com novos recursos. Nas versões mais recentes do Windows 10 ou Windows Server 2019 e superiores, o ISE agora é um recurso não instalável pelo usuário. Não há planos para remover permanentemente o ISE. A equipe do PowerShell e seus parceiros estão focados em melhorar a experiência de script na extensão do PowerShell para Visual Studio Code.

Passos Seguintes

Armado com o conhecimento para migrar efetivamente, instale o PowerShell 7 agora!